多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 2440驅動奇譚--helloworld

2440驅動奇譚--helloworld

來源:程序員人生   發布時間:2014-10-08 11:19:07 閱讀次數:3520次

        要不要這樣,還沒寫好過驅動就要我去裁剪內核?  好吧,看到用戶手冊上“LED 驅動已經被編譯到缺省內核中,因此不能再使用 insmod 方式加載。 ”  我重新把手冊上手工定制內核走了一遍,把自己之后要寫的一些驅動給否掉,以便可以insmod去掉的驅動有:lcd驅動(包括其中有個logo的選項),觸摸屏驅動,音頻驅動,看門狗驅動,I2C驅動,pwm驅動,led驅動,按鍵驅動,A/D驅動,RTC驅動 ; 由于把lcd驅動否掉了,開發板里也就沒燒寫qt,之燒寫了文件系統rootfs,文件名為:rootfs_rtm_2440.img  (光盤目錄:image/linux/rtm )

         這是我的第一篇驅動,為了紀念下追劇一個暑假,越演越狗血的電視劇--古劍奇譚,就寫成驅動奇譚

系統:Ubuntu 12.04

驅動交叉編譯內核:linux-2.6.32.2               //建立交叉編譯

開發板:mini2440 (128M nandflash)       //關于怎么燒寫linux到開發板請點擊,Linux RootFs 選擇rootfs_rtm_2440.img  (光盤目錄:image/linux/rtm )

開發所需工具:NFS網絡文件  minicom  


pc端:

首先新建一個自己寫的驅動的文件夾

1. # mkdir  /home/lianghuiyong/my2440drivers           //新建文件夾

2. # cd  /home/lianghuiyong/my2440drivers             //進入文件夾

3. # VIM helloworld.c 


helloworld.c 內容為:

#include<linux/init.h> #include<linux/module.h> static int hello_init(void) { printk(KERN_ALERT "Hello,mini2440 module is installed! "); return 0; } static void hello_cleanup(void) { printk(KERN_ALERT "Good-bye,mini2440 module was removed! "); } module_init(hello_init); module_exit(hello_cleanup); MODULE_LICENSE("Daul BSD/GPL");


代碼中module_init ,module_exit是驅動模塊加載、卸載函數,MODULE_LICENSE("Daul BSD/GPL");是模塊許可證聲明,依照 Daul BSD/GPL 協議


4. #VIM Makefile


Makefile內容:(2.4內核和2.6內核的寫法有點不同,以下為2.6的寫法)

PWD = $(shell pwd) KDIR =/opt/FriendlyARM/mini2440/linux-2.6.32.2/ obj-m:= helloworld.o all: $(MAKE) -C $(KDIR) M=$(PWD) CONFIG_DEBUG_SECTION_MISMATCH=y clean: rm -rf *.o *~core.depend. *.cmd *.ko *.mod.c .tmp_versions rm -rf *.order Module.* insmod: insmod helloworld.ko rmmod: rmmod helloworld active: echo -e "$(MAKE) " $(MAKE) -C $(KDIR) M=$(PWD)


注意一:KDIR 后接的目錄要為友善之臂提供的內核所安裝的目錄,之前我使用網友的一段:KDIR :=/lib/modules/$(shell uname -r)/build,其實這里的目錄是 ubuntu 內核目錄,ubuntu 內核版本(3.2)和開發板的內核版本(2.6)是不相同的,所以如果在 ubuntu 內核下編譯生成的驅動是不能在開發板上 insmod 的!會提示 invalid module format錯誤,其中三個 helloworld 要隨 helloworld.c 文件名更改

5、# make

6、# cp ./helloworld.ko /NFSboot/



注意二:由于編寫驅動的內核是開發板的內核(2.6),而ubuntu的內核是3.2,所以這個驅動在ubuntu上是insmod不了的。附( 如果是用ubuntu的內核寫的驅動的話,insmod后沒有打印相關信息,可以使用   cat /var/log/kern.log | tail  查看日記   )




開發板端:

1、打開minicom (minicom帶顏色啟動是:minicom -c on),開發板上電
2、# mount -t nfs -o nolock 192.168.1.102:/NFSboot /mnt     //掛載 /NFSboot 目錄到開發板 /mnt 下   //配置NFS網絡文件
3、# cd /mnt
4、# ls
5、#  insmod helloworld.ko
6、#  lsmod
7、#  rmmod helloworld 



有可能第一次加載驅動時出現:
helloworld: module license 'Daul BSD/GPL' taints kernel. Disabling lock debugging due to kernel taint Hello,mini2440 module is installed!
只是內核的一個提示,沒關系的,第三行就是我們要的信息,當我第二次insmod的時候,上面兩行就沒了


錯誤筆記:

1丶 make: *** /opt/FriendlyARM/mini2440/linux-2.6.32.2M=/home/lianghuiyong/my2440driversmodeles: 沒有那個文件或目錄。 停止。

這個應該是makefile書寫問題,不同的內核版本,書寫有些不同,詳情點擊


2丶insmod: can't read 'helloworld': No such file or directory

insmod需要加文件后綴 .ko


3丶insmod: error inserting '****.ko': -1 File exists

之前insmod后沒有rmmod,解決方法:rmmod ****


4丶insmod: cannot insert 'helloworld.ko': invalid module format 

這有可能是因為修改了makefile之后沒有將之前編譯所產生的文件刪除。除了makefile和 .c 文件,其余刪除,再make

也可能是KDIR路徑問題,KDIR要為開發板內核所在的目錄,即linux-2.6.32.2的目錄

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产在线精品福利大全 | 欧美亚洲 尤物久久 综合精品 | freexxx性欧美vide0高清 | 91精品国产闺蜜国产在线闺蜜 | 欧美日韩大尺码免费专区 | 免费理论片在线观看 | 91精品国产一区二区三区左线 | 欧美网色 | 欧美成人影院免费观 | 性欧美xxx极品另类 性欧美暴力猛交69hd | 亚洲一区日本 | 久久黄色毛片 | 欧美头交videos在线播放 | 欧美第六页 | 欧美亚洲日本一区二区三区浪人 | 亚洲欧美日韩人成 | 日本一区二区三区四区在线观看 | 女性一级全黄生活片在线播放 | 久久国产综合 | 欧美v亚洲 | 97精品国产福利一区二区三区 | 亚洲欧美色综合一区二区在线 | 国产高清在线精品一区在线 | 波多野结衣免费免费视频一区 | 国产午夜亚洲精品久久www | 亚洲天堂精品在线观看 | 在线观看精品国产福利片尤物 | 中文字幕一区久久久久 | 国产精品乱码一区二区三区 | 国产男人女人做性全过程视频 | 欧美一区二区三区高清不卡tv | 欧美第一精品 | 久久天天躁狠狠躁夜夜爽蜜月 | 国产综合久久久久久 | 亚洲人成综合网站在线 | 中文国产成人精品久久96 | 麻豆影视免费观看 | 亚洲欧美另类精品久久久 | 国产伦精品一区二区三区在线观看 | 日韩亚洲欧美性感视频影片免费看 | 国产精品成人一区二区1 |