IMX6Q-Yocto編譯內(nèi)核、設(shè)備樹及文件系統(tǒng),將文件系統(tǒng)掛載在虛擬機(jī)上

下面是我的設(shè)備樹路徑,和uboot路徑同級(jí)有個(gè)linux-imx的文件夾,這個(gè)就是內(nèi)核的源碼的路徑了,設(shè)備樹就在內(nèi)核源碼里面!

/home/marvin/fsl-release-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/4.1.15-r0/git/arch/arm/boot/dts

編譯內(nèi)核

設(shè)置環(huán)境變量

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
export ARCH=arm
export CROSS_COMPILE=arm-poky-linux-gnueabi-

導(dǎo)入配置文件,關(guān)閉老式ATAGS方式內(nèi)核參數(shù)傳遞的支持

#在git目錄下 :/home/marvin/fsl-release-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/4.1.15-r0/git/
make imx_v7_defconfig
make menuconfig
關(guān)閉如下選項(xiàng)
Boot options  --->
[*]   Support for the traditional ATAGS boot data passing (NEW)
還需要修改其他配置項(xiàng),看文章結(jié)尾處的補(bǔ)充?。?!

可能遇到如下錯(cuò)誤,安裝一下缺少的庫即可

marvin@ubuntu:git$ make menuconfig
  HOSTCC  scripts/kconfig/mconf.o
In file included from scripts/kconfig/mconf.c:23:0:
scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: ncurses.h: 沒有那個(gè)文件或目錄
 #include CURSES_LOC
                    ^
compilation terminated.
make[1]: *** [scripts/kconfig/mconf.o] 錯(cuò)誤 1
make: *** [menuconfig] 錯(cuò)誤 2
解決方法:$ sudo apt-get install libncurs*

編譯內(nèi)核及設(shè)備樹

make uImage LOADADDR=0x12000000
make imx6q-krt.dtb

燒寫內(nèi)核和設(shè)備樹

因?yàn)镾D卡1K-1M的地方是UBOOT,所以內(nèi)核從1M的位置開始燒寫(seek*bs=10240B),注意內(nèi)核大小,SD卡分配的時(shí)候要分配夠空間
sudo dd if=arch/arm/boot/uImage of=/dev/sdb bs=512 seek=2048 conv=fsync
設(shè)備樹從10M的地方開始燒寫
sudo dd if=arch/arm/boot/dts/imx6q-krt.dtb of=/dev/sdb bs=512 seek=20480 conv=fsync
sd卡分區(qū)信息(1扇區(qū)分區(qū)時(shí)設(shè)置為512字節(jié))
> setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/mmcblk1p1 rootwait rw consoleblank=0 init=/sbin/init'

> setenv bootcmd 'mmc dev 0; mmc read 0x11ffffc0 0x800 0x4000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'
> saveenv
> reset
#mmc read 0x11ffffc0 0x800 0x4000;//讀取內(nèi)核到內(nèi)存  注意0x4000隨著內(nèi)核的體積改變而改變 我的內(nèi)核6.4M 給了0x4000*0x200=0x80000(8MB)空間,其中0x200是dd命令的bs大小,即bs=0x200=512字節(jié)
#mmc read 0x18000000 0x5000 0x800;//同上,讀取設(shè)備樹到內(nèi)存,參考i.MX_Linux_User's_Guide.pdf第20頁
#bootm 0x11ffffc0 - 0x18000000  給內(nèi)核啟動(dòng)傳參,load_addr(移動(dòng)到內(nèi)存后的地址)   fdt_add(設(shè)備樹地址)參考i.MX_Linux_User's_Guide.pdf第20頁
#root=/dev/mmcblk1p1,注意,在進(jìn)入linux內(nèi)核以后,SD卡槽是按照你電路與SOC的引腳關(guān)系定義的,比如我插在sdhc3卡槽上,前面還有sdhc2(但是沒有插sd卡),則sdhc3就是mmcblk1,若sdhc有卡則sdhc3就是mmcblk2。
找不到初始化文件,uboot參數(shù)修改成/sbin/init

內(nèi)核載入地址和設(shè)備樹載入地址

之前搭建環(huán)境時(shí),用bitbake編譯$ bitbake fsl-image-qt5的時(shí)候已經(jīng)生成了根文件系統(tǒng),路徑是

/home/marvin/fsl-release-bsp/build/tmp/deploy/images/imx6qsabresd

掛載文件系統(tǒng)到虛擬機(jī)
sudo mount -o loop -t ext4 fsl-image-qt5-imx6qsabresd.ext4 /home/marvin/rootfs
編譯所生成的文件

根文件系統(tǒng)復(fù)制思路

  • 首先你sd卡的前20M是不能動(dòng)的,因?yàn)殡m然他們沒有分區(qū)(沒有文件系統(tǒng)),但是他們存著uboot uimage dtb這些文件。20M是多少個(gè)block呢,我們燒寫uboot uimage dtb的時(shí)候用的bs是512,20M=20480B,20480=40960*512/1024,也就是說我們要從第40960個(gè)塊開始新建一個(gè)分區(qū)并格式化成sdb1。
  • 為什么不是sdb2、sdb3...呢,你開心就好,記得不要占用前20M,并且修改你的uboot啟動(dòng)參數(shù)mmcblk1p2、mmcblk1p3...
cat /proc/partitions
查看你的sd卡名稱,我的是sdb
sudo fdisk  /dev/sdb
#使用m參數(shù)查看fdisk的幫助
p
d
1   #刪除之前卡上的分區(qū),我只有一個(gè),只刪除1,同理刪除所有分區(qū)
n   #創(chuàng)建一個(gè)分區(qū)
p   #創(chuàng)建一個(gè)主分區(qū)
40960  #從40960開始創(chuàng)建
回車#結(jié)束使用默認(rèn)值(即SD卡結(jié)束處)
w#保存并退出

新建文件系統(tǒng)到sdb1

mkfs -t ext4 /dev/sdb1    #格式化硬盤,之所以選ext4,是因?yàn)槟憔幾g文件系統(tǒng)時(shí)選擇的ext4,對(duì)應(yīng)即可。
把yocto生成的文件系統(tǒng)解壓到SD卡

按照上圖中的方式把編譯生成的ext4格式的文件掛載到宿主電腦上,并把sdb1也掛載到宿主電腦上,這樣就可以直接拷貝所有文件到sdb1里面了

記得umount和用sync命令同步一下緩存
這樣你就可以把sd卡插到天嵌開發(fā)板上面了,啟動(dòng)后會(huì)有如下報(bào)錯(cuò)
這是因?yàn)槲矣玫腇T5316芯片,官方驅(qū)動(dòng)里默認(rèn)不是它,所以驅(qū)動(dòng)會(huì)報(bào)錯(cuò),,回到內(nèi)核路徑下,make menuconfig,把device driver中的input device里的touch screen的子菜單里選edt_ft5x06這個(gè)驅(qū)動(dòng),重新編譯下載內(nèi)核到sd卡就行了。

安裝音樂播放器的庫
yocto生成的帶qt的文件系統(tǒng)

補(bǔ)充:

  • 電源芯片自檢不過的解決方法
  • 天嵌2G內(nèi)存.cfg文件參數(shù)
  • 看門狗未關(guān)閉導(dǎo)致重啟,在內(nèi)核源碼目錄下make menuconfig關(guān)掉Device Drivers 下面的Watchdog TimerSupport下面的IMX2+ watchdog選項(xiàng)
  • 觸摸驅(qū)動(dòng)關(guān)閉并換成FT5X06,在內(nèi)核源碼目錄下make menuconfig關(guān)掉Device Drivers 下面的Input Devices Support下面的Touchscreens下面的MAX11801取消掉并且把EDT FocalTech FT5x06勾選上
  • 聲卡驅(qū)動(dòng)換成SGTL5000,在內(nèi)核源碼目錄下make menuconfig關(guān)掉Device Drivers 下面的sound card support下面的Advanced linux sound arch....下面的ALSA for socaudio support下面的soc audio for freescale cpus下的soc Audio support for imx boards with sgtl5000勾選上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,356評(píng)論 0 5
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,175評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,045評(píng)論 2 59
  • 學(xué)習(xí)stm32gpio 學(xué)習(xí)linux 程序員的三大方向 程序員的方向,一般可以分為3類:專業(yè)領(lǐng)域、業(yè)務(wù)領(lǐng)域、操作...
    王公民閱讀 966評(píng)論 0 3
  • 激情小說 每個(gè)家庭肯定都會(huì)配有一臺(tái)冰箱,可能有的還不止呢,但不管一臺(tái),兩臺(tái),三臺(tái),都避免不了這個(gè)問題:常年結(jié)著厚實(shí)...
    ljx愛祖國閱讀 400評(píng)論 0 0

友情鏈接更多精彩內(nèi)容