本文采用nfs掛載網絡文件系統的方式,手動創建設備節點,動態加載驅動模塊,對理解驅動編寫流程有很大好處!
一、初級驅動執行流程:
1、寫好Makefile文件,裡面包含將應用程序編譯成app文件,將驅動程序編譯成mydrv.ko文件的腳本
2、在Ubuntu裡執行sudo make
3、確保mydrv.ko和app被拷貝到nfs掛載的根文件系統的/modules目錄
4、在模塊中創建設備節點(在串口軟件顯示的開發板文件系統裡執行)
mknod /dev/dcx-drv c 250 0
4.1、執行ls /dev
觀察是否有設備dcx-drv,有則ok
5、安裝模塊設備
insmod /modules/mydrv.ko
5.1、執行cat /proc/devices (這個文件裡的設備是由驅動程序生成的)
觀察是否有“250 dcx-drv”,有則ok
6、執行./modules/app
觀察創建的內核模塊是否有執行,有則ok
二、代碼改動後需要重新編譯,完畢後執行:
1、刪掉原模塊:
rmmod /modules/mydrv
2、安裝新模塊:
insmod /modules/mydrv.ko
3、執行應用程序:
./modules/app
三、本文采用的Makefile文件
obj-m += mydrv.o
KERNEL_DIR = /opt/03.kernel_transplant/Android-kernel-samsung-dev
GCC = arm-linux-gcc
all:
make -C $(KERNEL_DIR) M=`pwd` modules #編譯驅動程序
$(GCC) -Wall app.c -o app #編譯應用程序
cp ./mydrv.ko /mini_rootfs/modules
cp ./app /mini_rootfs/modules
#clean:
rm -rf ./*.o
rm -rf ./*.order
rm -rf ./*.symvers
rm -rf ./*.mod.c