天天看點

linux驅動子產品之間通信

一、EXPORT_SYMBOL核心子產品函數導出機制

1. 案例:筆者要實作一個功能,驅動子產品(adc.ko)與驅動子產品(gpio.ko)之間通信。

2. 修改adc.ko驅動,在函數内部增加讀取adc狀态的接口函數

static unsigned char g_hardware_version = 0x7e;
unsigned char get_hardware_version_by_adc(void)
{
    return g_hardware_version;
}

EXPORT_SYMBOL(get_hardware_version_by_adc);      

3. 修改gpio.ko驅動,增加擷取adc狀态的接口函數

extern unsigned char get_hardware_version_by_adc(void);

static void nuc972_gpio_request(void)
{
    ......
    printk("nuc972_gpio_request(): get_hardware_version_by_adc=0x%02x\n", get_hardware_version_by_adc());
    ......
}      

4. 依次insmod加載adc.ko、gpio.ko驅動,運作調試資訊如下

nuc972_gpio_request(): get_hardware_version_by_adc=0x7e      
[root@szclou ~]#cat /proc/kallsyms | grep "get_hardware_version_by_adc"
bf01c028 T get_hardware_version_by_adc  [nuc972_adc]