yocto编译linux内核,IMX6Q-Yocto编译内核、设备树及文件系统,将文件系统挂载在虚拟机上...

下面是我的设备树路径,和uboot路径同级有个linux-imx的文件夹,这个就是内核的源码的路径了,设备树就在内核源码里面!

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

编译内核

设置环境变量

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-

导入配置文件,关闭老式ATAGS方式内核参数传递的支持

#在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

关闭如下选项

Boot options --->

[*] Support for the traditional ATAGS boot data passing (NEW)

还需要修改其他配置项,看文章结尾处的补充!!!

可能遇到如下错误,安装一下缺少的库即可

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: 没有那个文件或目录

#include CURSES_LOC

^

compilation terminated.

make[1]: *** [scripts/kconfig/mconf.o] 错误 1

make: *** [menuconfig] 错误 2

解决方法:$ sudo apt-get install libncurs*

编译内核及设备树

make uImage LOADADDR=0x12000000

make imx6q-krt.dtb

烧写内核和设备树

因为SD卡1K-1M的地方是UBOOT,所以内核从1M的位置开始烧写(seek*bs=10240B),注意内核大小,SD卡分配的时候要分配够空间

sudo dd if=arch/arm/boot/uImage of=/dev/sdb bs=512 seek=2048 conv=fsync

设备树从10M的地方开始烧写

sudo dd if=arch/arm/boot/dts/imx6q-krt.dtb of=/dev/sdb bs=512 seek=20480 conv=fsync

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

sd卡分区信息(1扇区分区时设置为512字节)

> 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;//读取内核到内存 注意0x4000随着内核的体积改变而改变 我的内核6.4M 给了0x4000*0x200=0x80000(8MB)空间,其中0x200是dd命令的bs大小,即bs=0x200=512字节

#mmc read 0x18000000 0x5000 0x800;//同上,读取设备树到内存,参考i.MX_Linux_User's_Guide.pdf第20页

#bootm 0x11ffffc0 - 0x18000000 给内核启动传参,load_addr(移动到内存后的地址) fdt_add(设备树地址)参考i.MX_Linux_User's_Guide.pdf第20页

#root=/dev/mmcblk1p1,注意,在进入linux内核以后,SD卡槽是按照你电路与SOC的引脚关系定义的,比如我插在sdhc3卡槽上,前面还有sdhc2(但是没有插sd卡),则sdhc3就是mmcblk1,若sdhc有卡则sdhc3就是mmcblk2。

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

找不到初始化文件,uboot参数修改成/sbin/init

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

内核载入地址和设备树载入地址

之前搭建环境时,用bitbake编译$ bitbake fsl-image-qt5的时候已经生成了根文件系统,路径是

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

挂载文件系统到虚拟机

sudo mount -o loop -t ext4 fsl-image-qt5-imx6qsabresd.ext4 /home/marvin/rootfs

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

编译所生成的文件

根文件系统复制思路

首先你sd卡的前20M是不能动的,因为虽然他们没有分区(没有文件系统),但是他们存着uboot uimage dtb这些文件。20M是多少个block呢,我们烧写uboot uimage dtb的时候用的bs是512,20M=20480B,20480=40960*512/1024,也就是说我们要从第40960个块开始新建一个分区并格式化成sdb1。

为什么不是sdb2、sdb3...呢,你开心就好,记得不要占用前20M,并且修改你的uboot启动参数mmcblk1p2、mmcblk1p3...

cat /proc/partitions

查看你的sd卡名称,我的是sdb

sudo fdisk /dev/sdb

#使用m参数查看fdisk的帮助

p

d

1 #删除之前卡上的分区,我只有一个,只删除1,同理删除所有分区

n #创建一个分区

p #创建一个主分区

40960 #从40960开始创建

回车#结束使用默认值(即SD卡结束处)

w#保存并退出

新建文件系统到sdb1

mkfs -t ext4 /dev/sdb1 #格式化硬盘,之所以选ext4,是因为你编译文件系统时选择的ext4,对应即可。

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

把yocto生成的文件系统解压到SD卡

按照上图中的方式把编译生成的ext4格式的文件挂载到宿主电脑上,并把sdb1也挂载到宿主电脑上,这样就可以直接拷贝所有文件到sdb1里面了

记得umount和用sync命令同步一下缓存

这样你就可以把sd卡插到天嵌开发板上面了,启动后会有如下报错

这是因为我用的FT5316芯片,官方驱动里默认不是它,所以驱动会报错,,回到内核路径下,make menuconfig,把device driver中的input device里的touch screen的子菜单里选edt_ft5x06这个驱动,重新编译下载内核到sd卡就行了。

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

安装音乐播放器的库

8cadbba4eec2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

yocto生成的带qt的文件系统

补充:

看门狗未关闭导致重启,在内核源码目录下make menuconfig关掉Device Drivers 下面的Watchdog TimerSupport下面的IMX2+ watchdog选项

触摸驱动关闭并换成FT5X06,在内核源码目录下make menuconfig关掉Device Drivers 下面的Input Devices Support下面的Touchscreens下面的MAX11801取消掉并且把EDT FocalTech FT5x06勾选上

声卡驱动换成SGTL5000,在内核源码目录下make menuconfig关掉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勾选上

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值