国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

迅為4418開發板-驅動-以模塊的方式編譯內核驅動

發布時間:2020-11-19 10:36    發布者:就是塔塔
關鍵詞: 迅為 , 4418
內核驅動不僅可以將驅動編譯到內核中,還可以動態的編譯內核驅動。本文檔介紹如何以模塊的方式編譯內核驅動。
要動態的編譯內核,首先需要將內核源碼編譯通過,內核的編譯請參考使用手冊第五章。
1.4418 內核編譯器的查詢和環境變量設置
在開發中,大家會遇到源碼和編譯器集成到一起的情況。迅為的 4418 源碼和 arm 編譯器就是集成到一起的,本節主要介紹如何找到編譯器路徑和配置環境變量。
進入 android 源碼目錄(這個目錄是作者的,用戶如果解壓目錄不一樣,請注意后面的Makefile 文件以及環境變量參數也要修改)。

如下圖所示,使用命令“cd kernel”。

使用命令“cp -r config_for_iTOP4418_android_RTL8211 .config”配置內核缺省文件,然后使用命令“export ARCH=arm”將平臺設置為 ARM
最后使用命令“make menuconfig”。

如下圖所示,內核配置界面。
進入“ General setup ---> ”,如下圖所示。下圖紅色方框中的“arm-eabi-”就是我們需要的信息,內核使用的編譯器是“arm-eabi-”。

退出 menuconfig 界面,使用命令“cd ../”返回到 android 目錄下,接著使用命令“find ./ -name *arm-eabi-*”查找源碼中自帶的編譯器在那個目錄下。

如上圖所示,我們找到內核使用的編譯器在“prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin”目錄下。大家可能很奇怪,為什么 arm 編譯器要放到“prebuilts/gcc/linux-x86/”目錄下,可能是三星工作人員懶得再建文件夾了吧。另外有 4.6 和 4.7 兩個版本,我們
直接用高版本就成。
那么編譯器完整的路徑為“/home/4418/android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/”。
使用命令“cd”命令,接著使用命令“vim .bashrc”打開環境變量文件,如下圖所示。

在接著按鍵 Shift+g,進入環境變量文本的最底行,如下圖所示。
如下所示,作者以前的編譯器使用的是 arm-2009,作者這里需要注釋掉。用戶如果前沒有設置過,則這一步可以忽略。

接著添加 4418 的編譯器環境變量,export PATH=$PATH:/home/4418/android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/
如下圖所示。

保存退出,使用命令“source .bashrc”更新環境變量。控制臺輸入“arm”,然后按Tab 鍵,如下圖所示。如果不出現如下界面或者仍然出現原來的編譯器,可以關掉這個控制臺,再開一下。

到這一步編譯器和環境變量就介紹完了。
2 Makefile 和測試驅動源碼以及編譯
2.1Makefile
Makefile 腳本文件:
export ARCH=arm
obj-m += iTOP4418_driver_hello.o
KDIR := /home/4418/android/kernel
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o
腳本中,export ARCH=arm 表示設置目標 CPU 類別為 arm,也就是編譯的依賴內核和驅動模塊目標 CPU 為 ARM。
obj-m += iTOP4418_driver_hello.o 表示編譯的源文件為 iTOP4418_driver_hello.c,
如果源文件名有變化,則需要修改成對應的。
KDIR 參數指向對應的內核源碼目錄。作者的內核源碼是在
/home/4418/android/kernel 目錄下,用戶要根據自己的具體情況來修改。
2.2 簡單驅動源碼
驅動文件名稱為:iTOP4418_driver_hello.c,源碼如下:
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("iTOPEET_dz");
static int hello_init(void)
{
printk(KERN_EMERG "Hello World enter!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "Hello world exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
驅動源碼只有基本的入口和出口函數。加載和卸載的時候分別打印“Hello Worldenter!”和“Hello world exit!”。
2.3 編譯
如下圖所示,將源碼拷貝到 Ubuntu 系統下。

使用命令“make”,如下圖所示,可以看到有“iTOP4418_driver_hello.ko”文件生成。

3 常見問題
在以模塊的方式編譯驅動的過程中,新手可能會以下問題。
1.內核源碼沒有編譯或者內核源碼路徑設置不正確。
如果內核源碼沒有編譯,那么模塊將會提示缺少庫之類的錯誤;如果路徑設置不正確,會提示找不到內核。
2.編譯器未設置正確。
會提示找不到 arm-gcc 庫之類的錯誤,請仔細檢查編譯器路徑,確定在控制臺輸入arm+Tab 之后可以出現 arm-eabi 編譯器。
另外部分用戶可能嘗試使用其它的編譯器,例如 arm-2009q3,之類的,理論上很多編譯器也是可以編譯通過,但是不建議這么做,驅動最好和內核使用同一個編譯器。
3.源碼和 Makefile 文件在 Windows 下編寫,然后拷貝到 Ubuntu 上,由于編輯器不同導致轉碼錯誤。
這種錯誤比較容易解決,Make 編譯之后,系統會提示 Makefile 或者驅動文件具體某一行出現問題。使用 vim 編輯器打開查看一下,就能找出一些亂碼,使用 vim 編輯器修正一下再編譯即可。


本文地址:http://www.4huy16.com/thread-748027-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 技術熱潮席卷三城,2025 Microchip中國技術精英年會圓滿收官!
  • Microchip第22屆中國技術精英年會上海首站開幕
  • “芯”光璀璨,鵬城共賞——2025 Microchip中國技術精英年會深圳站回顧
  • 電動兩輪車設計生態系統
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表