美文网首页BB-black开发板[Linux arm-v8]
Buildroot自制文件系统启动成功--Apple的学习笔记

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

作者: applecai | 来源:发表于2020-09-09 22:05 被阅读0次

    前言:

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

    相关文章

      网友评论

        本文标题:Buildroot自制文件系统启动成功--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/lmmyektx.html