前言:
因为总是用芯片官网的驱动觉得太简单了,学不到什么东西,定制才比较好玩。所以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 <giometti@linux.it>
[ 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
#
网友评论