嵌入式Linux驱动程序之编程常见错误

嵌入式Linux驱动程序之编程常见错误


1、warning: function declaration isn't a prototype
            这种错误也是很常见的,主要是对一些函数固定格式的错误使用。比如int function()改称int function(void)

           static int xxxx_init(void)记住不要缺少static,而static void xxxx_exit(void)

2、出现 warning: assignment makes pointer from integer without a cast 的原因

           第一可能是类型转换的问题。函数的返回值类型等等

          第二、在源文件中没有发现函数的声明,可能是忘加头文件了。(未经声明的函数原型一律默认为返回int值)

3、makefile:4: *** missing separator. Stop.
          最近常用SourceInsight3.5编辑程序,里面直接编辑保存的是word格式。用WinHex或UltraEdit以二进制方式打开,里面的

          Tab字符对应0x09而不应该是几个0x20。这是主要用vi打开文件,切入到底行模式,使用":set ff =unix"
4、模块与内核不匹配问题

       安装模块时出现:[root@FriendlyARM nfs]# insmod key2.ko

        key2: version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM mod_unload ARMv4 '

        这一行的意思就是说,当前插入的模块xxx.ko的版本信息(version magic)与正运行的kernel的版本信息不一致!应该是'2.6.32.2-       FriendlyARM mod_unload ARMv4 ',而实际上xxx.ko的版本信息却是:'2.6.32.2 mod_unload modversions ARMv4 '; 显然

      它们之间差别是很小的。实际上,根据上面安装的kernel源码来看,它们应该是没有什么差别的。

       我觉得解决这个问题最主要的手段是务必务必保证内核模块的Makefile文件中的

        KDIR := /home/google/Linux/FriendlyARM/linux-2.6.32.2与编译内核FriendlyARM/linux-2.6.32.2,下载到开发板的 zImage是同  一内核。
5、多文件编程结构体的存放位置

         我比较喜欢的是把结构体和函数声明放置头文件中,把头文件加到各个.c文件中,以前把结构体定义放置main.c中,编译时老是出错。

6、关于2.6.32在创建bus总线时的bus_id的问题

按照国嵌的代码(LDD那本书上的代码也一样):
struct device my_bus = {
    .bus_id = "my_bus0",
    .release = my_bus_release,
};

static int my_match(struct device *dev, struct device_driver *driver)
{
return !strncmp(dev->bus_id, driver->name, strlen(driver->name));
}

编译时,提示 struct device 中没有bus_id 这样的错误。打开/lib/modules/2.6.35-28-generic/build/include/linux/device.h
找到struct device  的定义,里面没有bus_id,但有:
const char *init_name; /* initial name of the device */                      这句。

可见,要把上面结构中的.bus_id = "my_bus0",         改为       .init_name = "my_bus0",
同时上网搜到,return !strncmp(dev->bus_id, driver->name, strlen(driver->name));这句也要改成:
return !strncmp(dev_name(dev), driver->name, strlen(driver->name));

这样编译即可成功!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值