這篇文章主要介紹了android怎么以模塊的方式編譯內核驅動的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇android怎么以模塊的方式編譯內核驅動文章都會有所收獲,下面我們一起來看看吧。
10多年的秦淮網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整秦淮建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“秦淮網站設計”,“秦淮網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
9.5.2.1 內核和編譯器路徑
本節(jié)介紹內核路徑、編譯器路徑
如下圖所示,作者的 android 源碼在“/home/imx6/iTOP-iMX6_android4.4.2”目錄下,內核源碼在其中的“kernel_imx”目錄下。
進入“kernel_imx”目錄,查看“build_android_kernel.sh”中的腳本文件,如下圖所示。
如上圖所示,我們可以得到一些信息,在后面編譯內核模塊的時候,需要設置編譯目標平臺為 arm,“export ARCH=arm”;編譯器的路徑為“$(pwd)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-”。
9.5.2.2 Makefile 文件
作者在“/home/imx6”目錄下新建一個“imx_driver_modules”目錄,將要編譯的驅動和 Makefile 文件放到這個目錄下。
Makefile 腳本文件:
obj-m += iTOP-iMX6_driver_hello.o
KDIR =/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm
CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
clean:
rm -rf modules.order *.o workqueue.o Module.symvers *.mod.c *.ko
腳本中:
第一行bj-m += iTOP-iMX6_driver_hello.o 表示編譯的源文件為 iTOP-iMX6_driver_hello.c,如果源文件名有變化,則需要修改成對應的。
第二行:KDIR 參數(shù)指向對應的內核源碼目錄。作者的內核源碼是在/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx 目錄下,用戶要根據(jù)自己的具體情況來改。
第三行:PWD ?= $(shell pwd)表示將當前目錄的路徑賦值給 PWD 變量,也就是/home/imx6/imx_driver_modules
第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示將當前目錄下的文件編譯為模塊,并且制定了內核源碼的路徑;
其中 ARCH=arm 表示設置目標 CPU 類別為 arm,也就是編譯的依賴內核和驅動模塊目標 CPU 為 ARM;
其中 CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-,表示設置編譯器路徑,$(KDIR)為/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx,所以這里完整的路徑為“/home/imx6/iTOP-iMX6_android4.4.2/kernel_imx/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-”,正好指向作者內核編譯器的路徑。
9.5.2.3 簡單驅動源碼
驅動文件名稱為:iTOP-iMX6_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);
驅動源碼只有基本的入口和出口函數(shù)。加載和卸載的時候分別打印“Hello Worldenter!”和“Hello world exit!”。
9.5.2.4 模塊編譯
如下圖所示,將源碼拷貝到 Ubuntu 系統(tǒng)下。
使用命令“make”,如下圖所示,可以看到有“iTOP-iMX6_driver_hello.ko”文件生成。
使用命令“make clean”,可以刪除中間文件,如下圖所示。
9.5.2.5 模塊編譯常見問題
在以模塊的方式編譯驅動的過程中,新手可能會以下問題。
1.內核源碼沒有編譯或者內核源碼路徑設置不正確。
如果內核源碼沒有編譯,那么模塊將會提示缺少庫之類的錯誤;如果路徑設置不正確,會提示找不到內核。
2.源碼和 Makefile 文件在 Windows 下編寫,然后拷貝到 Ubuntu 上,由于編輯器不同導致轉碼錯誤。
這種錯誤比較容易解決,Make 編譯之后,系統(tǒng)會提示 Makefile 或者驅動文件具體某一行出現(xiàn)問題。使用 vim 編輯器打開查看一下,就能找出一些亂碼,使用 vim 編輯器修正一下再編譯即可。
9.5.2.6 模塊加載和卸載
作者這里使用最小 linux 系統(tǒng)來測試模塊的加載和卸載,最小系統(tǒng)在使用手冊第十三章有介紹。在編譯模塊前,內核源碼必須要編譯通過,作者這里是在最小系統(tǒng)是加載模塊,那么內核源碼也必須編譯為 qt 的內核(最小系統(tǒng)使用的是 qt 的內核),否則是無法加載的。
如下圖所示,將 ko 文件拷貝到 u 盤上,啟動開發(fā)板,將 U 盤插到開發(fā)板上(靠近網口的usb 接口),使用命令“mkdir /mnt/udisk”新建文件夾,使用命令“mount /dev/sda1/mnt/udisk/”掛載盤符,使用命令“cp -r /mnt/udisk/iTOP-iMX6_driver_hello.ko ./”將驅動模塊拷貝到開發(fā)板。
然后使用命令“insmod iTOP-iMX6_driver_hello.ko”加載驅動模塊,如下圖示,打印出“Hello World enter!”,表明模塊驅動加載成功。
接著使用命令“rmmod iTOP-iMX6_driver_hello”卸載模塊,如下圖所示,發(fā)現(xiàn)提示沒有目錄“/lib/modules”,我們就按照提示新建目錄。
如下圖所示,使用命令“mkdir /lib/modules”新建目錄,再次使用命令“rmmodiTOP-iMX6_driver_hello”卸載驅動模塊,發(fā)現(xiàn)仍然提示沒有“3.0.35-g0e09bb1-dirty”這個路徑。
如下圖所示,使用命令“mkdir /lib/modules/3.0.35-g0e09bb1-dirty”新建目錄,再次用命令“rmmod iTOP-iMX6_driver_hello”卸載驅動模塊,發(fā)現(xiàn)打印信息“Hello worldexit!”,模塊卸載成功。
只要重新燒寫系統(tǒng),這些新建目錄只需要建立一次即可。
關于“android怎么以模塊的方式編譯內核驅動”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“android怎么以模塊的方式編譯內核驅動”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱:android怎么以模塊的方式編譯內核驅動
鏈接URL:http://jinyejixie.com/article14/ghdsde.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、全網營銷推廣、網站設計、微信小程序、域名注冊、網站營銷
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)