下面是我的設(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勾選上