靜態編譯
就是直接把驅動放到內核中,成爲內核中的一部分。把寫好的驅動源代碼(led.c文件)放到,內核的字符驅動中(路徑爲:linux-2.6.32.2/drivers/char ),然後修改下配置;
第一部分要修改的是:
修改文件Kconfig(vim linux-2.6.32.2/drivers/char/Kconfig)
往裏面添加:
config MY2440_LEDS
tristate "Leds driver yzh"(在make menuconfig時顯示的驅動模塊名稱)
depends on ARCH_S3C2440 (如果選擇了這個配置,表示只有在s3c2440系統上纔會出現這個選項)
default y
---help---
myLeds yuzhihui
修改上面一部分只是在make menuconfig時能夠有相應的選項來給用戶選擇是否加載這個驅動模塊;
選擇模塊步驟(也就是編譯內核步驟):
make menuconfig(在這之前要把開發板內核對應的屏幕配置文件修改成.config文件,比如:cp config_mini2440_x35 .config)
1、如果在Kconfig中添加配置時選擇了depends on ARCH_S3C2440,那麼這裏要先進入:system type --> 選擇你依賴的平臺。如果沒有添加那句話,則這裏可以省略;
2、依次進入:Device Drivers --->> Character devices --->> <*> Leds driver yzh (這時候就會有你上面添加的模塊選項)
第二部分要修改的是:
修改文件Makefile(vim linux-2.6.32.2/drivers/char/Makefile)
往Makefile中添加句:obj-$(CONFIG_MY2440_LEDS) += myLed.o;其中CONFIG_MY2440_LEDS是根據上面Kconfig中來的,myLed.o 則是根據你的源文件:myLed.c來的。
當上面make menuconfig後可以到 .config中看看會有句:CONFIG_MY2440_LEDS=y ;表示已經選中了這個模塊編譯到內核中去了;
當make menuconfig 順利選擇模塊後,就開始編譯內核了,命令:make zImage;
最後到 /arch/arm/boot/中找到zImage就是編譯後的內核了;
動態加載:
直接在宿主機中用Makefile把驅動源代碼編譯成 .ko文件,然後通過nfs服務器拷貝到開發板中,直接用insmod加載進去就可以了。
測試:
首先可以用命令:cat /proc/devices 來查看下已經加載的驅動,並且顯示主設備號和次設備號
接着在/dev下創建一個設備節點:mknod yzhChar c 250 0;mknod 表示創建的是設備節點;yzhChar 表示該設備文件的名稱(當測試是用open打開該文件);c 表示是字符設備文件;250 表示是主設備號;0 表示是次設備號;
如果測試程序就可以把/dev/yzhChar當作一個普通文件來讀寫操作。
sscanf("123456","%s",buf);//此處buf是數組名,它的意思是將123456以%s的形式存入buf中!
轉自:http://blog.csdn.net/yuzhihui_no1/article/details/45083415