Buildroot自制文件系统sd卡启动成功--Apple的学习笔记

前言:

因为总是用芯片官网的驱动觉得太简单了,学不到什么东西,定制才比较好玩。所以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就是要选择可启动项。


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下busybox是红色的,这是权限问题,通过chmod 777,依然有相同的错误。

排查步骤2

后来自己发现busybox有点奇怪,看上去不是文件也不是文件夹。通过命令file busybox发现它为empty。原来是我用sudo tar -C /media/applecai/rootfs/ -xf rootfs.tar命令进行的解压加copy导致的问题。所以我在buildroot本地解压后,查看file busybox是elf-32文件。于是将本地解压的全部copy到sd卡的rootfs。

三,大功告成

花费了我3个晚上的业余时间,有所收获,将来再遇到这样的情况不会束手无策了,哈哈,人生第一次制作linux启动文件。将来就可以玩各种花样裁剪了。


U-Boot SPL 2019.07 (Sep 06 2020 - 16:55:30 +0800)
Trying to boot from MMC1


U-Boot 2019.07 (Sep 06 2020 - 16:55:30 +0800)

CPU  : AM335X-GP rev 2.1
Model: TI AM335x BeagleBone Black
DRAM:  512 MiB
NAND:  0 MiB
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from FAT... OK
Net:   eth0: ethernet@4a100000
Warning: usb_ether MAC addresses don't match:
Address in ROM is          de:ad:be:ef:00:01
Address in environment is  50:33:8b:36:25:90
, eth1: usb_ether
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
6020864 bytes read in 400 ms (14.4 MiB/s)
34782 bytes read in 5 ms (6.6 MiB/s)
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Loading Device Tree to 8fff4000, end 8ffff7dd ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.19.59 (root@applecaiHP) (gcc version 8.4.0 (Buildroot 2020.05.2)) #1 SMP Sun Sep 6 17:05:07 CST 2020
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
[    0.000000] Memory policy: Data cache writeback
[    0.000000] cma: Reserved 16 MiB at 0x9e800000
[    0.000000] CPU: All CPU(s) started in SVC mode.
[    0.000000] AM335X ES2.1 (sgx neon)
[    0.000000] random: get_random_bytes called from start_kernel+0x8c/0x4a8 with crng_init=0
[    0.000000] percpu: Embedded 18 pages/cpu s42152 r8192 d23384 u73728
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129412
[    0.000000] Kernel command line: console=ttyS0,115200n8 noinitrd root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 480012K/522240K available (8192K kernel code, 790K rwdata, 2620K rodata, 1024K init, 7473K bss, 25844K reserved, 16384K cma-reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0xe0000000 - 0xff800000   ( 504 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xdfe00000   ( 510 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0x(ptrval) - 0x(ptrval)   (9184 kB)
[    0.000000]       .init : 0x(ptrval) - 0x(ptrval)   (1024 kB)
[    0.000000]       .data : 0x(ptrval) - 0x(ptrval)   ( 791 kB)
[    0.000000]        .bss : 0x(ptrval) - 0x(ptrval)   (7474 kB)
[    0.000000] Running RCU self tests
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU lockdep checking is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
[    0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[    0.000021] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[    0.000055] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[    0.000113] OMAP clocksource: timer1 at 24000000 Hz
[    0.000632] timer_probe: no matching timers found
[    0.001591] Console: colour dummy device 80x30
[    0.001651] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.001669] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.001685] ... MAX_LOCK_DEPTH:          48
[    0.001700] ... MAX_LOCKDEP_KEYS:        8191
[    0.001715] ... CLASSHASH_SIZE:          4096
[    0.001731] ... MAX_LOCKDEP_ENTRIES:     32768
[    0.001746] ... MAX_LOCKDEP_CHAINS:      65536
[    0.001761] ... CHAINHASH_SIZE:          32768
[    0.001776]  memory used by lock dependency info: 4655 kB
[    0.001792]  per task-struct memory footprint: 1536 bytes
[    0.001882] Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)
[    0.078547] pid_max: default: 32768 minimum: 301
[    0.079009] Security Framework initialized
[    0.079157] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.079181] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.082541] CPU: Testing write buffer coherency: ok
[    0.082729] CPU0: Spectre v2: using BPIALL workaround
[    0.084247] CPU0: thread -1, cpu 0, socket -1, mpidr 0
[    0.086700] Setting up static identity map for 0x80100000 - 0x80100078
[    0.087360] rcu: Hierarchical SRCU implementation.
[    0.089542] smp: Bringing up secondary CPUs ...
[    0.089575] smp: Brought up 1 node, 1 CPU
[    0.089595] SMP: Total of 1 processors activated (996.14 BogoMIPS).
[    0.089613] CPU: All CPU(s) started in SVC mode.
[    0.093704] devtmpfs: initialized
[    0.121117] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[    0.121918] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.121995] futex hash table entries: 256 (order: 2, 16384 bytes)
[    0.123687] pinctrl core: initialized pinctrl subsystem
[    0.128929] NET: Registered protocol family 16
[    0.136041] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.242858] audit: initializing netlink subsys (disabled)
[    0.245763] cpuidle: using governor menu
[    0.259929] audit: type=2000 audit(0.240:1): state=initialized audit_enabled=0 res=1
[    0.261358] OMAP GPIO hardware version 0.1
[    0.286936] No ATAGs?
[    0.286963] hw-breakpoint: debug architecture 0x4 unsupported.
[    0.287421] omap4_sram_init:Unable to allocate sram needed to handle errata I688
[    0.287451] omap4_sram_init:Unable to get sram pool needed to handle errata I688
[    0.325797] edma 49000000.edma: TI EDMA DMA engine driver
[    0.332549] vgaarb: loaded
[    0.333677] SCSI subsystem initialized
[    0.335681] pps_core: LinuxPPS API ver. 1 registered
[    0.335710] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti 
[    0.335766] PTP clock support registered
[    0.340094] clocksource: Switched to clocksource timer1
[    0.495688] VFS: Disk quotas dquot_6.6.0
[    0.495898] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.523329] NET: Registered protocol family 2
[    0.525671] tcp_listen_portaddr_hash hash table entries: 256 (order: 1, 10240 bytes)
[    0.525764] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.525862] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.526425] TCP: Hash tables configured (established 4096 bind 4096)
[    0.526830] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.526949] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.527378] NET: Registered protocol family 1
[    0.530508] RPC: Registered named UNIX socket transport module.
[    0.530596] RPC: Registered udp transport module.
[    0.530615] RPC: Registered tcp transport module.
[    0.530633] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.534019] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
[    0.539291] Initialise system trusted keyrings
[    0.540617] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[    0.544081] NFS: Registering the id_resolver key type
[    0.544270] Key type id_resolver registered
[    0.544339] Key type id_legacy registered
[    0.544525] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[    0.552777] Key type asymmetric registered
[    0.553010] Asymmetric key parser 'x509' registered
[    0.553198] io scheduler noop registered
[    0.553224] io scheduler deadline registered
[    0.553420] io scheduler cfq registered (default)
[    0.553449] io scheduler mq-deadline registered
[    0.553468] io scheduler kyber registered
[    0.556308] pinctrl-single 44e10800.pinmux: 142 pins, size 568
[    0.564527] Serial: 8250/16550 driver, 6 ports, IRQ sharing enabled
[    0.577837] console [ttyS0] disabled
[    0.578361] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 30, base_baud = 3000000) is a 8250
[    1.263550] console [ttyS0] enabled
[    1.300834] brd: module loaded
[    1.332036] loop: module loaded
[    1.337877] mtdoops: mtd device (mtddev=name/number) must be supplied
[    1.347712] libphy: Fixed MDIO Bus: probed
[    1.430036] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
[    1.437790] davinci_mdio 4a101000.mdio: detected phy mask fffffffb
[    1.448842] libphy: 4a101000.mdio: probed
[    1.453168] davinci_mdio 4a101000.mdio: phy[2]: device 4a101000.mdio:02, driver SMSC LAN8710/LAN8720
[    1.464158] cpsw 4a100000.ethernet: Detected MACID = 50:33:8b:36:25:8e
[    1.471307] cpsw 4a100000.ethernet: initialized cpsw ale version 1.4
[    1.477714] cpsw 4a100000.ethernet: ALE Table size 1024
[    1.483144] cpsw 4a100000.ethernet: cpts: overflow check period 500 (jiffies)
[    1.493916] i2c /dev entries driver
[    1.501061] sdhci: Secure Digital Host Controller Interface driver
[    1.507302] sdhci: Copyright(c) Pierre Ossman
[    1.513185] omap_gpio 44e07000.gpio: Could not set line 6 debounce to 200000 microseconds (-22)
[    1.522088] omap_hsmmc 48060000.mmc: Got CD GPIO
[    1.528518] omap_hsmmc 48060000.mmc: Linked as a consumer to regulator.1
[    1.563656] omap_hsmmc 481d8000.mmc: Linked as a consumer to regulator.1
[    1.596014] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.603064] ledtrig-cpu: registered to indicate activity on CPUs
[    1.612421] oprofile: using arm/armv7
[    1.616886] Initializing XFRM netlink socket
[    1.621945] NET: Registered protocol family 10
[    1.631253] Segment Routing with IPv6
[    1.635118] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    1.643241] NET: Registered protocol family 17
[    1.647804] NET: Registered protocol family 15
[    1.652822] Key type dns_resolver registered
[    1.657290] ThumbEE CPU extension supported.
[    1.661729] Registering SWP/SWPB emulation handler
[    1.666562] omap_voltage_late_init: Voltage driver support not added
[    1.673047] sr_dev_init: Unknown instance smartreflex0
[    1.678674] SmartReflex Class3 initialized
[    1.686896] Loading compiled-in X.509 certificates
[    1.740089] mmc0: host does not support reading read-only switch, assuming write-enable
[    1.751463] mmc0: new high speed SDHC card at address 0007
[    1.767528] mmcblk0: mmc0:0007 SD32G 29.0 GiB
[    1.778828]  mmcblk0: p1 p2
[    1.794956] random: fast init done
[    1.821470] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[    1.827959] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[    1.838611] omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz
[    1.846438] hctosys: unable to open rtc device (rtc0)
[    1.851692] sr_init: No PMIC hook to init smartreflex
[    1.864298] mmc1: new high speed MMC card at address 0001
[    1.874688] mmcblk1: mmc1:0001 M62704 3.56 GiB
[    1.881278] mmcblk1boot0: mmc1:0001 M62704 partition 1 2.00 MiB
[    1.889015] mmcblk1boot1: mmc1:0001 M62704 partition 2 2.00 MiB
[    1.897744] mmcblk1rpmb: mmc1:0001 M62704 partition 3 512 KiB, chardev (248:0)
[    1.911400]  mmcblk1: p1
[   20.306804] EXT4-fs (mmcblk0p2): recovery complete
[   20.317196] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[   20.325839] VFS: Mounted root (ext4 filesystem) on device 179:2.
[   20.333311] devtmpfs: mounted
[   20.338534] Freeing unused kernel memory: 1024K
[   20.344126] Run /sbin/init as init process
[   20.463166] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Saving random seed: [   20.835541] random: dd: uninitialized urandom read (512 bytes read)
OK
Starting network: OK

Welcome to Buildroot
buildroot login: root
# ls
# cd /
# ls
bin      lib      media    proc     sbin     usr
dev      lib32    mnt      root     sys      var
etc      linuxrc  opt      run      tmp
#

你可能感兴趣的:(Buildroot自制文件系统sd卡启动成功--Apple的学习笔记)