免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
如何自己編寫第一個驅(qū)動
今天做到如何自己編寫第一個Helloworld驅(qū)動,結(jié)果遇到一些問題。??墒腔艘粋€晚上,找遍了論壇的帖子,還是沒有找到一個清楚明白的解決方案。
這里就先小小的抱怨一下吧。呵呵

不過,在經(jīng)過其它地方查找資料之后,總算解決了這些問題。現(xiàn)在就先總結(jié)一下,希望后面大家再遇到類似問題的時候,可以少走彎路,有所收獲吧

第一點、如果輸入make modules后,發(fā)現(xiàn)沒有編譯出相應(yīng)的xxx.ko文件,請看
解決方法:如何把設(shè)備驅(qū)動文件添加到Linux內(nèi)核編譯選項配置的menuconfig中
【目的】
把一個字符設(shè)備驅(qū)動文件,添加到內(nèi)核中,希望編譯成模塊,而非build-in。
【參考資料】
內(nèi)核的源碼樹目錄下一般都會有兩個文件:Kconfig和Makefile。
http://blog.sina.com.cn/s/blog_4a377e150100c896.html
【具體步驟】
1.首先保證已經(jīng)有驅(qū)動源文件了:as352x_afe_charger.c
放在和其他你所要添加的模塊放在一個目錄下,此處是drivers\i2c\chips下。
2.在drivers\i2c\chips\makefile中,添加:
obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_charger.o
3.在drivers\i2c\chips\Kconfig
中,添加如下內(nèi)容:
----------------------------------------------
config AS352X_AFE_CHG
tristate "AS352X AFE Charger Driver"
depends on I2C_AS352X && AS352X_AFE
help
   If you say yes here you get support for AS352X AFE Charger.
   This driver can also be built as a module. If so, the module
   will be called AS352X AFE Charger.
----------------------------------------------
解釋如下:
(1)AS352X_AFE_CHG是自己定義的名字,當(dāng)然要盡量保證有意義。
同時,你會注意到,在上面的makefile中添加的
obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_charger.o
中的CONFIG_AS352X_AFE_CHG,是CONFIG_加上我們在kconfig下寫的config變量。
這兩個要匹配,才能實現(xiàn)你在menconfig定義的結(jié)果,傳遞到makefile中,
以便決定編譯的時候是如何編譯:不編譯/編譯進(jìn)內(nèi)核/編譯成模塊
(2)tristate 表示我此處添加的模塊,可以
在make ARCH=arm menuconfig中看到的,選擇之后:
* 編譯到內(nèi)核中
M 編譯成模塊,即生成XXX.ko
不選中,就不編譯該文件
(3)depends on I2C_AS352X && AS352X_AFE
是前面自己找到的,表示此編譯選項只有當(dāng)I2C_AS352X 和AS352X_AFE都選中,才會出現(xiàn)。
當(dāng)然,如果此模塊不依賴于其他模塊,則不需要加上這個depends on了。
【附錄】
1.如果設(shè)置成M,module模式,則要用
make ARCH=arm
編譯出as352x_afe_charger.ko

make ARCH=arm uImage
只能編譯內(nèi)核,而不編譯模塊。





第二點、好了,現(xiàn)在相信大家已經(jīng)可以進(jìn)行編譯工作了。但是,這時候,可能大家還會遇上諸如這樣的錯誤
drivers/char/EmbedSky_hello.c:12:32: error: asm/arch/regs-gpio.h: No such file or directory
[root@localhost linux-2.6.30.4]# clear
[root@localhost linux-2.6.30.4]# ky_hello.o] Error 1
make[1]: *** [drivers/char] Error 2
make: *** [drivers] Error 2



這是因為,
對于Linux2.6.25.8的內(nèi)核,這三個頭文件存放的路徑是
#include <asm/irqs.h>
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>

但是,對于Linux2.6.30.4的內(nèi)核,它的存放路徑在
#include <mach/irqs.h>
#include <mach/regs-gpio.h>
#include <mach/hardware.h>

因此,需要這樣修改一下。。


寫到這里,也許大家會說,那不如,直接把它注釋掉就好了嘛,這個方法可以,但是,它不是解決問題的根本方法。


最后,這幾份文件到底真正的存放在哪里的,這里以我的Linux2.6.30.4的內(nèi)核為例,他是實際存放在
Linux2.6.30.4/arch/arm/mach-s3c2410/include/mach/hardware.h中


這樣,以后我們在寫驅(qū)動時,就知道他調(diào)用的頭文件實際存放在哪里了,這樣就可以舉一反三的解決問題了。。。



好了,這是我的簡單總結(jié),作拋磚引玉之用,如果大家還有什么不同的見解,或者新的地方,歡迎繼續(xù)補(bǔ)充?。?!
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
linux設(shè)備驅(qū)動歸納總結(jié)(一):內(nèi)核的相關(guān)基礎(chǔ)概念
成功移植linux-2.6.33.5到fs2410上
linux-2.6.35內(nèi)核配置和網(wǎng)卡驅(qū)動添加
linux-2.6.38到tiny6410的移植手冊
"android linux kernel" VS "standard linux kernel" - linux內(nèi)核 - 路漫漫其修遠(yuǎn)兮 吾將上下而求索
理解6410 LCD驅(qū)動之LCD驅(qū)動移植(內(nèi)核版本:2.6.38)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服