把驅動編譯進內核的3種方法-----(mini2440 key按鍵為例)
方法1:單獨以模塊的方式編譯及加入內核的方法(最簡單的方法)
說明:key.c(key_hui.c)是驅動的代碼,Makefile是編譯規則,key.ko是驅動。key_irq是測試代碼.
(1). 在源程序目錄make arch=arm ,就會生成key.ko文件
(2) 系統啟動進入控制台後insmod key.ko
(3) 查看設備號cat /proc/devices
(4) 創建節點mknod /dev/globalmem c 235 0(有的內核支持自動創建節點有的不支持)
或者:在文件系統的啟動腳本,例如在etc/profile末尾添加一行:source /testshell,再在根目錄下的testshell中加入如下加載命令,則系統啟動後驅動就自動加載了,如:
#!/bin/sh
ehco "i am testshell"
insmod /minitest/key.ko ----掛載驅動
mknod /dev/key_driver c 253 0 -----創建節點
exec /minitest/key_irq -----執行應用程序
(5) 卸載設備:rmmod key.ko
方法二:直接編譯進內核
(1)把key.c源代碼改名為key_hui.c放到 linux-2.6.32/drivers/char目錄
(2)在當前目錄的vim Kconfig文件增加key的編譯配置選項,如下所示:
config KEYS_MINI2440
tristate "KEY Support for Mini2440 GPIO KEYS--add by youshaohui**"
depends on MACH_MINI2440
default y if MACH_MINI2440
help
This option enables support for key connected to GPIO lines on Mini2440 boards.
(3)在目錄的Makefile中增加對key.c源代碼的編譯,vim Makefile,如下所示:
(obj-$(CONFIG_KEYS_MINI2440) += key_hui.o)
(4)進入make menuconfig/device Drivers/Character devises/菜單中就會
看到選項[] S2C2410 KEY Driver ---SU,選上它.
打開key_hui.c文件,把加載函數名的“__init”去掉,把卸載函數名的“__exit”去掉,不然編譯不通過。
重新編譯燒錄內核,燒錄方法。
{
make zImage
進入cd /mini2440/linux-2.6.32.2/arch/arm/boot目錄,用u-boot/tools/mkimage這個工具為內核加上u-boot引導所需要的文件頭:
/mini2440/u-boot-201003/tools/mkimage -n 'linux-2.6.32' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage.img
//生成的鏡像在:/mini2440/linux-2.6.32.2/arch/arm/boot 裡
tftp 0x30008000 uImage.img
下載完後可燒進flash
nand erase 0x80000 300000
nand write 0x30008000 0x80000 300000
set bootcmd 'nand read 0x30008000 0x80000 300000;bootm 0x30008000'
saveenv
reset
}
方法三:在內核中以模塊的方式編譯內核
(1) 前面幾步和方法二的一樣,只是把(4)是把選項改為[M].
(2) make zImage生成內核 此時內核中不包含key的驅動。
(3) 編譯好內核之後還要編譯內核模塊#make modules 在 linux-2.6.32/drivers/char下會生成key_hui.ko
(4) 安裝內核模塊:
make modules_install INSTALL_MOD_PATH=/root/build_rootfs/rootfs,此時在文件系統中會創建/root/build_rootfs/rootfs/lib/modules/2.6.32.2-FriendlyARM目錄,並將編譯好的內核模塊從內核源碼目錄貝到指定的文件系統的/lib/modules/2.6.32.2-FriendlyARM/kernel下。
(5).燒寫內核和文件系統(或用NFS連接開發版)。
(6).進入開發板/lib/modules/2.6.32.2-FriendlyARM/kernel/drivers/char,此時key_su.ko在該目錄下,然後insmod key_su.ko上去即可,就可以運行相應應用程序了。