分类: 嵌入式
2010-08-14 15:54:51
嵌入式学习入门 http://blog.chinaunix.net/u3/117680/showart.php?id=2300212
TX2440A开发板上还有很多外围设备:LED,按键,ADC,蜂鸣器,温度传感器,红外收发器,CAN总线控制器。我们需要编写驱动,并加入到内核中。
由于这些驱动全部加入内核,会使内核体积增大,并且我们也不经常用到这些设备,最好的办法是把这些驱动编译成模块,放入文件系统中,然后可以根据需要动态的加载或卸载驱动模块,增加了驱动使用的灵活性。
将驱动程序源码
|
TX2440_adc.c TX2440_beep.c TX2440_button.c TX2440_ds18b20.c TX2440_led.c
放到drivers/char/目录下,修改同目录下Kconfig文件,在第13行加入:
config TX2440_LED
tristate "TX2440 LED Driver"
depends on ARCH_S3C2440
help
this is LED Driver for TX2440 development boards
config TX2440_BEEP
tristate "TX2440 BEEP Driver"
depends on ARCH_S3C2440
help
this is BEEP Driver for TX2440 development boards
config TX2440_ADC
tristate "TX2440 ADC Driver"
depends on ARCH_S3C2440
help
this is ADC Driver for TX2440 development boards
config TX2440_BUTTON
tristate "TX2440 BUTTON Driver"
depends on ARCH_S3C2440
help
this is BUTTON Driver for TX2440 development boards
config TX2440_DS18B20
tristate "TX2440 DS18B20 Driver"
depends on ARCH_S3C2440
help
this is DS18B20 Driver for TX2440 development boards
修改同目录下Makefile文件,在13行加入:
obj-$(CONFIG_TX2440_LED) += TX2440_led.o
obj-$(CONFIG_TX2440_BEEP) += TX2440_beep.o
obj-$(CONFIG_TX2440_ADC) += TX2440_adc.o
obj-$(CONFIG_TX2440_BUTTON) += TX2440_button.o
obj-$(CONFIG_TX2440_DS18B20) += TX2440_ds18b20.o
配置内核,支持驱动模块:
Device Drivers --->
Character devices --->
[M] TX2440 LED Driver
[M] TX2440 BEEP Driver
[M] TX2440 ADC Driver
[M] TX2440 BUTTON Driver
[M] TX2440 DS18B20 Driver
‘M’表示将驱动编译成模块
执行:#make SUBDIR=drivers/char/ modules
编译完成后,会在drivers/char/目录下生成 TX2440_xxx.ko的文件,将这几个文件复制到根文件系统下 lib/modules/2.6.31/文件夹下。
在光盘资料/源码包/驱动测试程序源码 目录下有这几个驱动的测试程序,在这几个目录中执行make,编译出可执行程序,复制到文件系统的 usr/bin目录下。
烧入制作好的根文件系统,因为这里只是编译了驱动模块,内核并没有更新,所以不需要重新下载内核。
如果要加载驱动,在开发板上执行:
#insmod lib/modules/2.6.31/TX2440_xxx.ko
即可动态加载驱动,然后用测试程序,测试驱动的使用情况
如果要卸载驱动,在开发板上执行:
#rmmod TX2440_xxx 即可动态卸载驱动
如果要查看当前系统已加载的驱动,可执行:
#lsmod 会列出加载的驱动列表
注意:在2.6.31版本的内核中,驱动模块必须放在lib/modules/2.6.31目录下,执行insmod和rmmod时,系统会自动查找该目录下的驱动模块。