这里我们以mini2440为例来说明驱动程序的编译与下载
ƒLinux内核有2种加载驱动程序的方法:
ƒ 静态:
Linux系统启动时,通过代码自身加载模块. 这种方式称为静态编译入内核, 驱动程序开发完毕后一般使用这种方式.
ƒ 动态:
Linux系统启动后,通过insmod 等命令加载模块. 这种方式称为动态加载, 驱动程序开发调试过程中一般使用这种方式.
方法1 :驱动程序以驱动模块加载(动态)
1.将完成的驱动程序放入相应的内核驱动文件下:如字符设备放入drivers/char目录下
2.将模块加入内核代码树,这样模块才可以在内核空间运行。并做相应的配置。
第一步:编译配置文件Kconfig,加入驱动选项,使之在make menuconfig 的时候出现
打开linux-2.6.32.2/drivers/char/Kconfig文件,添加如图所示:
保存退出,这时在linux-2.6.32.2 目录位置运行一下make menuconfig就可以在Device Drivers Æ Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,此意为要把该选项编译为模块方式;再按下空格会变为<*> ,意为要把该选项编译到内核中,在此我们选择<M>,如图:
第二步:我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini2440_hello_module.c 编译进去的,还需要在Makefile中把内核配置选项和真正的源代码联系起来,打开linux-2.6.32.2/driver s/char/Makefile,如图添加并保存退出:
第三步:这时回到linux-2.6.32.2 源代码根目录位置,执行make modules ,就可以生成我们所需要的内核模块文件mini2440_hello_module.ko了
至此,我们已经完成了模块驱动的编译。
方法2 :静态
静态和动态的不同之处在于在make menuconfig 中选择<*>而不是<M>,最后一步不是回到linux-2.6.32.2 源代码根目录位置,执行make modules ,而是执行make zImage
最简单的莫过于写Makefile文件,一个Makefile文件解决了所有问题,Make一下就可以了。