国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三)

這篇具有很好參考價(jià)值的文章主要介紹了Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:

萬事開頭難,如果我們在開發(fā)板上開發(fā)出第一個(gè)應(yīng)用程序,第一個(gè)驅(qū)動(dòng)程序,那么后續(xù)的開發(fā)就會(huì)稍微簡單點(diǎn),下面讓我們來進(jìn)行第一個(gè)應(yīng)用程序和第一驅(qū)動(dòng)程序的開發(fā)吧。

目錄

一、開發(fā)板的第1個(gè)APP實(shí)驗(yàn)

1.通過Git倉庫

2.通過windows上傳?

二、開發(fā)板的第1個(gè)驅(qū)動(dòng)實(shí)驗(yàn)

1.前提條件:

2 編譯內(nèi)核:

(1)編譯內(nèi)核?

(2)編譯設(shè)備樹

3.編譯安裝內(nèi)核模塊

(1) 編譯內(nèi)核模塊

(2) 安裝內(nèi)核模塊到Ubuntu某個(gè)目錄下備用

?4.安裝內(nèi)核和模塊到開發(fā)板上

?(1) 查看當(dāng)前內(nèi)核版本

(2)掛載網(wǎng)絡(luò)文件系統(tǒng)

(3)更新內(nèi)核

(4)更新設(shè)備樹

(5)接下來要把這些文件復(fù)制到開發(fā)板上

(7)同步一下

?(6)最后重啟開發(fā)板,它就使用新的zImage、dtb、模塊了。

5.編譯驅(qū)動(dòng)

(1)上傳內(nèi)核文件

(2)編譯模塊驅(qū)動(dòng)

6.在開發(fā)板安裝驅(qū)動(dòng)模塊???

(1)利用串口掛載網(wǎng)絡(luò)文件系統(tǒng)

(2)裝載驅(qū)動(dòng)程序

7.進(jìn)行編譯測試


一、開發(fā)板的第1個(gè)APP實(shí)驗(yàn)

1.通過Git倉庫

????????Git倉庫里含有本教程的所有源碼,前面已經(jīng)在Windwos下載了Git倉庫, 為例方便編譯,也可以在Ubuntu中再次下載它。 在Ubuntu終端上執(zhí)行如下命令。?

git clone https://e.coding.net/weidongshan/01_all_series_quickstart.git

2.通過windows上傳?

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)?hello.c的源碼如下:


/* 執(zhí)行命令: ./hello weidongshan
 * argc = 2
 * argv[0] = ./hello
 * argv[1] = weidongshan
 */

int main(int argc, char **argv)
{
        if (argc >= 2)
                printf("Hello, %s!\n", argv[1]);
        else
                printf("Hello, world!\n");
        return 0;
}

?編譯程序 在Ubuntu中可以執(zhí)行以下命令編譯、執(zhí)行:

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

????????上述命令編譯得到的可執(zhí)行程序hello 可以在 Ubuntu 中運(yùn)行,但是如果把它放到 ARM 板子上去,它是無法執(zhí)行的。因?yàn)樗鞘褂胓cc編譯的,是給PC機(jī)編譯的,里面的機(jī)器指令是x86的。 我們要想給ARM板編譯出hello程序,需要使用交叉編譯工具鏈?

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

 mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt 

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)?Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

我們要想給ARM板編譯出hello程序,需要使用交叉編譯工具鏈?

執(zhí)行以下命令編譯程序:

arm-buildroot-linux-gnueabihf-gcc -o hello hello.c

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)?Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

?這樣編譯出來的hello程序才可以在ARM板子上運(yùn)行。先把編譯生成的 hello 文件拷貝到Ubuntu nfs服務(wù)目錄下,備用:

cp  hello   /home/book/nfs_rootfs 

二、開發(fā)板的第1個(gè)驅(qū)動(dòng)實(shí)驗(yàn)

1.前提條件:

為什么編譯驅(qū)動(dòng)程序之前要先編譯內(nèi)核?(配置編譯:1.內(nèi)核,2.設(shè)備樹,3.驅(qū)動(dòng))

驅(qū)動(dòng)程序要用到內(nèi)核文件:

????????比如驅(qū)動(dòng)程序中這樣包含頭文件:#include ,其中的asm是 一個(gè)鏈接文件,指向asm-arm或asm-mips,這需要先配置、編譯內(nèi)核才會(huì)生成 asm 這個(gè)鏈接文件。

編譯驅(qū)動(dòng)時(shí)用的內(nèi)核、開發(fā)板上運(yùn)行到內(nèi)核,要一致:

???????? 開發(fā)板上運(yùn)行到內(nèi)核是出廠時(shí)燒錄的,你編譯驅(qū)動(dòng)時(shí)用的內(nèi)核是你自己編譯 的,這兩個(gè)內(nèi)核不一致時(shí)會(huì)導(dǎo)致一些問題。所以我們編譯驅(qū)動(dòng)程序前,要把自己編譯出來到內(nèi)核放到板子上去,替代原來的內(nèi)核。

更換板子上的內(nèi)核后,板子上的其他驅(qū)動(dòng)也要更換

????????板子使用新編譯出來的內(nèi)核時(shí),板子上原來的其他驅(qū)動(dòng)也要更換為新編譯出 來的。所以在編譯我們自己的第1個(gè)驅(qū)動(dòng)程序之前,要先編譯內(nèi)核、模塊,并且 放到板子上去。

2 編譯內(nèi)核:

????????不同的開發(fā)板對應(yīng)不同的配置文件,配置文件位于內(nèi)核源碼 arch/arm/configs/目錄。kernel 的編譯過程如下:

cd /home/book/100ask_imx6ull-sdk/Linux-4.9.88 
make 100ask_imx6ull_defconfig 

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

(1)編譯內(nèi)核?

編譯完成zImage后才可編譯設(shè)備樹文件。

make zImage  -j4 

編譯完成后生成的文件如圖

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

(2)編譯設(shè)備樹

 make dtbs

????????編譯完成后,在 arch/arm/boot 目錄下生成 zImage 內(nèi)核文件, 在 arch/arm/boot/dts 目錄下生成設(shè)備樹的二進(jìn)制文件 100ask_imx6ull 14x14.dtb。把這 2個(gè)文件復(fù)制到/home/book/nfs_rootfs目錄下備用。

cp arch/arm/boot/zImage ~/nfs_rootfs
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb  ~/nfs_rootfs 

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

3.編譯安裝內(nèi)核模塊

(1) 編譯內(nèi)核模塊

????????進(jìn)入內(nèi)核源碼目錄后,就可以編譯內(nèi)核模塊了:

cd ~/100ask_imx6ull-sdk/Linux-4.9.88/
make  modules 

內(nèi)核模塊編譯完成后如圖?

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

(2) 安裝內(nèi)核模塊到Ubuntu某個(gè)目錄下備用

????????可以先把內(nèi)核模塊安裝到nfs目錄(/home/book/nfs_rootfs)。

注意:后面會(huì)使用tree命令查看目錄結(jié)構(gòu),如果提示沒有該命令,需要執(zhí)行以 下命令安裝tree命令:

sudo apt install tree

下載完成如圖:

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

執(zhí)行以下命令安裝模塊:?

 cd ~/100ask_imx6ull-sdk/Linux-4.9.88/ 
 make  ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs  modules_install

把模塊安裝在nfs目錄“/home/book/nfs_rootfs/”下:

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

?4.安裝內(nèi)核和模塊到開發(fā)板上

?(1) 查看當(dāng)前內(nèi)核版本

uname -a

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

(2)掛載網(wǎng)絡(luò)文件系統(tǒng)

 mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

(3)更新內(nèi)核

cp  /mnt/zImage  /boot 

(4)更新設(shè)備樹

cp  /mnt/100ask_imx6ull-14x14.dtb   /boot 

(5)接下來要把這些文件復(fù)制到開發(fā)板上

cp  /mnt/lib/modules  /lib  -rfd 

(7)同步一下

sync

?(6)最后重啟開發(fā)板,它就使用新的zImage、dtb、模塊了。

reboot

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

5.編譯驅(qū)動(dòng)

(1)上傳內(nèi)核文件

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

(2)編譯模塊驅(qū)動(dòng)

首先,進(jìn)入 100ask_imx6ull_src_bin 目錄,修改 Makefile 文件 “KERN_DIR”為自己的內(nèi)核所在路徑,如果你的內(nèi)核源碼不在此目錄則根據(jù)你的實(shí)際情況進(jìn)行修改:

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

/home/book/100ask_imx6ull-sdk/Linux-4.9.88

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

?編譯驅(qū)動(dòng)程序和生成測試程序,修改完內(nèi)核所在目錄后,就可以編譯模塊驅(qū)動(dòng)了

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

6.在開發(fā)板安裝驅(qū)動(dòng)模塊???

(1)利用串口掛載網(wǎng)絡(luò)文件系統(tǒng)

啟動(dòng)開發(fā)板后掛載網(wǎng)絡(luò)文件系統(tǒng)

開發(fā)板啟動(dòng)后通過nfs掛載Ubuntu目錄的方式。使用的是VMware橋接方式,假設(shè)Ubuntu IP為192.168.5.11,在開發(fā)板上執(zhí)行以下命令:

[root@imx6ull:~]#  mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

(2)裝載驅(qū)動(dòng)程序

[root@imx6ull:~]# cd /mnt/01_hello_drv/

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

在開發(fā)板串口終端上執(zhí)行如下命令,即可安裝相應(yīng)的驅(qū)動(dòng)模塊。?

[root@imx6ull:/mnt/01_hello_drv]# insmod hello_drv.ko

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

[root@imx6ull:/mnt/01_hello_drv]# cat /proc/devices

[root@imx6ull:/mnt/01_hello_drv]# cat /proc/devices
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 29 fb
 81 video4linux
 89 i2c
 90 mtd
108 ppp
116 alsa
128 ptm
136 pts
166 ttyACM
180 usb
188 ttyUSB
189 usb_device
207 ttymxc
216 rfcomm
226 drm
245 hello        //hello驅(qū)動(dòng)程序
246 ttyGS
247 ttyLP
248 watchdog
249 tee
250 iio
251 ptp
252 pps
253 rtc
254 gpiochip

Block devices:
  1 ramdisk
259 blkext
  7 loop
  8 sd
 31 mtdblock
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
179 mmc

安裝完成后可以執(zhí)行l(wèi)smod 命令來查看是否安裝成功?

[root@imx6ull:/mnt/01_hello_drv]# lsmod
Module                            Size  Used by
hello_drv                         3746  0
//hello_drv驅(qū)動(dòng)程序

如果你沒有更新板子上的內(nèi)核,會(huì)出現(xiàn)類似如圖所示錯(cuò)誤?

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

可以強(qiáng)行安裝驅(qū)動(dòng)程序,比如使用“insmod -f hello_drv.ko”這樣的命令,它會(huì)提示說 “內(nèi)核已經(jīng)被污染了”,但是不影響學(xué)習(xí)、不影響使用?

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)

7.進(jìn)行編譯測試

[root@imx6ull:/mnt/01_hello_drv]# ./hello_drv_test

Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三),1024程序員節(jié)?以上運(yùn)行結(jié)果表明測試成功文章來源地址http://www.zghlxwxcb.cn/news/detail-717244.html

到了這里,關(guān)于Linux下的IMX6ULL——開發(fā)板的第一個(gè)APP和驅(qū)動(dòng)實(shí)驗(yàn)(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包