LCD模块化驱动
在对S3C2410的LCD编写模块化驱动程序时,首先要从内核中去除LCD驱动。这里需要做一些改动,系统调用被加在以下文件中,需去除:/root/usr/src/arm/linux/kernel/sys.c;/root/usr/src/arm/linux/include/arm-arm下的unistd.h和lcd.h;/root/usr/src/arm/linux/arch/arm/kernel下的calls.s。
编写模块化驱动程序,有以下几个关键的函数。
● lcd_kernel_init(void)//当模块被载入时执行
● lcd_kernel_exit(void)//当模块被移出内核空间时被执行
● lcd_kernel1_ioctl(struct*inode, struct*file, unsigned int cmd, unsigned longarg) //其他功能
每当装配设备驱动程序时,系统自动调用初始化模块lcd_kernel_init(void)。
另一个必须提供的函数是lcd_kernel_exit(void),它在模块被卸载时调用,负责进行设备驱动程序的工作。
执行insmod lcd.o命令即可将LCD驱动添加到内核中,执行rmmod lcd命令即可从内核中删除LCD驱动。
静态加载LCD驱动
将写好的lcd驱动程序lcd.c放到arm/linux/drivers/char目录下,修改arm/linux/drivers/char/config.in文件,加上一行:Bool'LCD driver support'CONFIG_LCD;修改arm/linux/drivers/char/Makefile文件,加上一行:obj-$(CONFIG_LCD)+=lcd.o。
这样,当再进行make xconfig时,就会选择是否将LCD驱动编译进内核。同样的办法也可用在其他设备上。 |