linux 一运行build卡,Buildroot自制文件系统sd卡启动成功--Apple的学习笔记

本文详细记录了使用Buildroot编译Linux文件系统并制作SD卡启动的过程,包括遇到的问题及解决方法。在编译过程中因下载速度慢手动下载库文件,完成编译后,制作SD卡启动时,通过cfdisk分区,调整启动项解决无法启动问题。然后解决了加载zImage失败和文件系统启动失败的问题,最终成功启动。
摘要由CSDN通过智能技术生成

前言:

因为总是用芯片官网的驱动觉得太简单了,学不到什么东西,定制才比较好玩。所以uboot和驱动之前玩过,唯独文件系统没玩过。网上了解到Buildroot很爽,官网看了下,觉得不错,而且官方实验资料正好对应BB black开发板。本着资源充分利用的原则,从学习方案角度来看必须选择Buildroot。因为我手上有bb black开发板。

一,编译制作文件系统

Buildroot官网资我参考的是buildroot-labs.pdf,发现make过程中dl文件夹中下载各种库文件好慢,所以我ctrl+c终止了好多次进行手工下载放入dl文件夹,大概上周日花了一天完成了编译。总的来说没有曲折,就是慢。

二,制作sd卡启动

原来用ti sdk的话,我也是用sd卡启动,但是都是用Etcher工具烧录源码,然后替换里面的uboot或者zImage及modules。从来没自己制作过。所以坎坷来了

问题1:自制SD卡无法启动。

排查步骤1

查了MLO的启动原理,就通过am335x芯片的rom boot自动识别到FAT格式的sd卡则启动。这步骤没有问题。

排查步骤2

我用pdf中的cfdisk进行的分区。后来我将MLO和uboot放入Etcher工具制作的分区后,能成功启动。

检查原版mmc part,信息如下,发现Type是0c,而我选的是0e。结果修改后还是无法启动。

Part Start Sector Num Sectors UUID Type

1 2048 143360 5acae36b-01 0c Boot

2 145408 8013824 5acae36b-02 83

排查步骤3

渐渐的熟悉了cfdisk工具的每个选择项后,发现我可以不使用dd,直接进入cfdisk观察sdb1和sdb2的设置。那么事情就变简单了。我把用Etcher工具制作的sd通过cfdisk对比信息后,发现了启动项。原来pdf中描述的set it bootable就是要选择可启动项。

6adf51ba7328

image.png

问题1解决了

1.dd if=/dev/zero of=/dev/sdb bs=1M count=16

2.sudo cfdisk /dev/sdb

选择dos,然后创建128M主分区选择e(W95 FAT16 LBA)并且选择“写入”输入yes+回车。再创建剩余空间为83(linux)并且选择“写入”输入yes+回车。最后退出。将FAT设置为可启动

3.sudo mkfs.vfat -F 32 -n boot /dev/sdb1

4.sudo mkfs.ext4 -L rootfs -E nodiscard /dev/sdb2

问题2:无法加载zImage

其实就是uEnv.txt里面的设置问题,我看了芯片手册及一些关键参数,后来学习了正点电子中手工设置参数的方法。uEnv.txt应该怎么写我还不清楚,但是手工设置的方法我已经掌握了。这部分之后复习uboot的时候再进行深入。

解决方案如下

1.setenv bootargs 'console=ttyS0,115200n8 noinitrd root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait'

2.setenv bootcmd 'mmc dev 0; fatload mmc 0:1 82000000 zImage; fatload mmc 0:1 88000000 am335x-boneblack.dtb; bootz 82000000 - 88000000;'

3.saveenv

4.boot

问题2解决了

问题3:无法启动文件系统

[ 16.745895] Starting init: /sbin/init exists but couldn't execute it (error -8)

[ 16.764801] Run /etc/init as init process

[ 16.771681] Run /bin/init as init process

[ 16.775889] Run /bin/sh as init process

[ 16.839311] request_module: kmod_concurrent_max (0) close to 0 (max_modprobes: 50), for module binfmt-0000, throttling...

[ 21.839847] request_module: modprobe binfmt-0000 cannot be processed, kmod busy with 50 threads for more than 5 seconds now

[ 21.864690] Starting init: /bin/sh exists but couldn't execute it (error -8)

[ 21.883326] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.

[ 21.897917] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance. ]---

我学习buildroot的主要目的就是学习制作文件系统,这才是重点,居然无法启动文件系统,我有点崩溃了,但是也有点兴奋。我猜测解决了此问题就可以大功告成了。

排查步骤1

先在网上搜索了下Starting init: /bin/sh exists but couldn't execute it (error -8),果然有一篇https://blog.csdn.net/weixin_41974358/article/details/105279356直接给了我调查方向。我将sd卡插入PC去查看/bin下b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值