歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 把驅動編譯進內核的3種方法(mini2440 key按鍵為例)

把驅動編譯進內核的3種方法(mini2440 key按鍵為例)

日期:2017/3/1 10:07:47   编辑:Linux編程

把驅動編譯進內核的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上去即可,就可以運行相應應用程序了。

Copyright © Linux教程網 All Rights Reserved