將自己的驅動編譯進核心
最近在學習android驅動開發,主要是參考李寧老師的《Android深度探索——HAL與驅動開發》。李寧老師講的很好,按照書中的敘述,基本都能夠跟著做下來,學到了很多。但是在第一個驅動程式—統計單詞個數—中,在將word_count驅動編譯進入核心實現自動載入的時候遇到了問題,經過思考找到了自己的解決方案,在此記錄一下。
宣告:可能是我的某些步驟有錯,所以沒能夠按照書的步驟走下去,希望大牛指點。
首先是問題的情況:
按照書中所說
1、將word_count.c檔案放到<Linux核心目錄>/drivers/char目錄中。
2、修改Kconfig檔案
開啟<Linux核心目錄>
config WORD_COUNT
bool "word_count driver"
help
This is a word count driver. It can get a word count from /dev/wordcount
3、修改Makefile檔案
開啟<Linux核心目錄>/drivers/char/Makefile檔案。找個位置新增如下內容
obj-$(CONFIG_WORD_COUNT) += word_count.o
4、設定.config檔案
.config通過make
menuconfig命令在選單中配置。進入Linux核心頂層目錄(<Linux核心目錄>)。然後執行make menuconfig命令顯示配置選單,並進入“Device Drivers”>“Character devices”子選單,找到“word_count_driver”選單項,按空格鍵將“word_count_driver”選單項前設定成星號(*)。然後退出配置介面並儲存所做的修改。
5、編譯Linux核心
進入<Linux核心目錄>目錄,執行下面的命令編譯Linux核心。
# make
然後用模擬器載入剛才生成的核心(4.1是我的虛擬機器的名字)
emulator -avd 4.1 -kernel <Linux核心目錄>/arch/arm/boot/zImage
說是可以通過adb shell在/dev下面看到wordcount這個裝置。
我照著這個做的沒有提示什麼問題,但是在模擬器的/dev下面死活看不到wordcount這個裝置。試了好多方法,比如修改檔名稱啊,make clean 然後重新編譯啊,還是沒有解決。
突然看到<Linux核心目錄>/drivers這個目錄下面有char還有個misc,想起來編寫word_count.c,在設備註冊的時候有是用的下面一句話
ret=misc_register(&misc);
也就是說註冊是時候wrodcount這個驅動是按照misc設備註冊的,是不是應該將word_count.c放到<Linux核心目錄>/drivers/misc下面來做上面的操作。
於是把以上的步驟類比放到<Linux核心目錄>/drivers/misc目錄下面來做。如下
1、將word_count.c檔案放到<Linux核心目錄>/drivers/misc目錄中。
2、修改<Linux核心目錄>/drivers/misc/Kconfig檔案。
3、修改<Linux核心目錄>/drivers/misc/Makefile檔案。
4、在<Linux核心目錄>,執行
make menuconfig
進入“Device Drivers”>“Misc devices”子選單,找到“word_count_driver”選單項,按空格鍵將“word_count_driver”選單項前設定成星號(*),退出並儲存。
5、進入<Linux核心目錄>目錄,編譯Linux核心。
編譯完成,載入到虛擬機器,進入/dev下就可一看到wordcount這個裝置了。
要是執行書中之前敘述的用原生C和用NDK以及直接用java程式碼操作裝置檔案對wordcount進行測試,需要修改下wordcount的許可權為777
[email protected]:/dev # chmod 777 wordcount
或者
# adb shell chmod 777 /dev/wordcount
然後可以看到測試成功。
相關推薦
將自己的驅動編譯進核心
最近在學習android驅動開發,主要是參考李寧老師的《Android深度探索——HAL與驅動開發》。李寧老師講的很好,按照書中的敘述,基本都能夠跟著做下來,學到了很多。但是在第一個驅動程式—統計單詞個數—中,在將word_count驅動編譯進入核心實現自動載入的時候遇到了
【ZYNQ_LINUX】如何把自己的驅動編譯進核心或模組(Kconfig和Makefile
linux驅動編寫(Kconfig檔案和Makefile檔案) feixiaoxing 2013年09月08日 17:12 5502 【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在linux編寫驅動的過程中,有兩個檔案是我們必須
如何把自己的驅動編譯進核心或模組(Kconfig和Makefile)
DIY:向核心新增自己的程式 A.在Linux核心中增加自己的程式步驟(注意這裡只是程式檔案): 1.將編寫的原始碼複製到Linux核心原始碼的相應目錄中。 2.在目錄的Kconfig檔案中增加新原始碼對應專案的編譯配置選項 3.在目錄的Makefile檔案中增加對新原始碼的編譯條目。 B.在Linux核心d
A31S android 手動載入攝像頭命令,驅動編譯進核心
insmod /system/vendor/modules/videobuf2-core.ko insmod /system/vendor/modules/videobuf2-memops.ko ins
如何將ramdisk.img 編譯進核心和修改init.rc
一 將ramdisk.img編譯進核心android系統可以不用ramdisk.img 檔案就可以啟動檔案系統,原因是在android核心編譯的時候使用配置選項已經將檔案系統編譯進核心。方法是在編譯配置選項中開啟File Systems->"The Extended
如何將寫好的驅動程式編譯進核心
1、進入目錄linux-kernel-samsung-dev\drivers\char 新建目錄key_arm,並將驅動程拷貝進去 mkdir key_drv 2、在key_arm目錄裡編寫裡Kconfig檔案,內容如下: men
s3c6410開發板核心配置和編譯&將已寫好的驅動程式編譯進核心
一、s3c6410開發板核心配置和編譯 1、解壓核心包,將smdk6410_config核心配置檔案拷貝成.config(預設配置檔案)到核心原始碼樹下。一般情況下,關於平臺的配置檔案存放在核心原始碼樹的arch/arm/configs/目錄下,這裡用到的smdk6410_
linux開發の如何靜態的將驅動模組編譯進核心
在解決這個問題之前,我們先搞明白linux究竟是怎樣管理原始碼中上萬個檔案的。我們看Linux原始碼的目錄,十分科學,基本上看到目錄就可以猜到裡面放的什麼,那怎麼把檔案連線起來,靠的就是Kconfig,它可以告知Makefile那些編譯那些不編譯。第一步:在driver目錄下
驅動是否編譯進核心
大家都知道,在編譯核心時,在makefile中將驅動模組-y就可以編譯進核心。 雖然會生成.o檔案,但是要進一步確認是否編譯進核心; 還可以通過在System.map檔案搜尋驅動的相關函式是否存在。
將第三方apk編譯進Android系統檔案system.img
1、把apk拷貝到out\target\product\generic\system\app中。 執行命令make snod , 把新增的spk編到system.img 中 2、使用mkyaffs2image工具,把apk及相關檔案(如.so)拷
檔案系統編譯進核心
1、利用busybox製作根檔案目錄。(需要有init 和 linuxrc)2、makemenuconfig 在general setup 中設定 initial ram filesystem and RAM disk 後指定檔案系統原始檔路徑.3、makemenuconfi
linux 編譯進核心 && 編譯成模組module
refer: http://blog.csdn.net/yicao821/article/details/6740269 http://blog.csdn.net/yicao821/article/details/6740269 1.核心編譯命令(makefile) o
① 根檔案系統直接編譯進核心
直接用TQ2440提供的原始碼linux2.6.30.4, 然後用其提供的busybox.1.16.0 在(make menuconfig中)沒有選中Initial Ram... 時是這樣的 看到這裡,大約知道除了根檔案系統有問題外,其他沒有問題. 將檔案系統編
對比直接編譯進核心和模組形式
Compiling directly into a kernel vs. modules You have two options for adding functionality to the kernel: building functions into the ke
詳解將驅動程式編譯進linux核心
1、進入目錄linux-kernel-samsung-dev\drivers\char 2、新建目標目錄01.led,將驅動相關檔案複製到此目錄 注:需確保複製的驅動檔案是能正常執行的驅動 3、在目錄01.led裡編寫Kconfig檔案 menu "xxx" config XXX_LED
android-----模擬器載入自己編譯的核心(適用於驅動練習)
1. 下載android 模擬器所用的核心原始碼, 代號為goldfish 2. 下載arm-linux交叉工具鏈 3. 編譯核心檔案 4. 讓android模擬器執行在剛編譯的核心上 5. 編譯自己的hello核心模組 6 將hello.ko載入到核心中 1
Linux Export命令 以及 linux 怎麼檢視核心裡面是否編譯進了某個驅動(不是模組了的驅動),怎麼檢視
檢視核心已存在 驅動cat /lib/modules/$(uname -r)/modules.builtin 一、Windows 環境變數 1、在Windows 系統下,很多軟體安裝都需要配置環境變數,比如 安裝 jdk ,如果不配置環境變數,在非軟體安裝的目錄下執行javac 命令,將
將IDEA maven項目中src源代碼下的xml等資源文件編譯進classes文件夾
默認 文件的 ips src directory htm 文件夾 ref 編譯 如題,IDEA的maven項目中,默認源代碼目錄下的xml等資源文件並不會在編譯的時候一塊打包進classes文件夾,而是直接舍棄掉。 如果使用的是Eclipse,Eclipse的src目錄下
將git版本號編譯進程序
.cn tab reflog 代碼 uil unix 作者 記錄 提交 問題的提出 不管是什麽版本管理工具,每一條提交記錄都會有一個對應的版本號,一般是一個整數,git是一個hash字符串。不管怎樣,這個版本號是唯一的,有時候我們在程序運行的時候會在日誌裏面輸出程序的版本
將自行添加的包編譯進Tomcat
Tomcat入職第一天就遇到了問題,搭建環境的時候有一些jar包Maven下載不了,手動加載的時候未部署進Tomcat,導致一直運行失敗,後來想起來這個東西,嘗試之後終於成功。 將自行添加的包編譯進Tomcat