我正在尝试让 Techonologic Systems TS-7970 板引导 Guix 系统,这是一个 GNU/Linux 发行版。
我正在使用参考 U-Boot (
https://github.com/embeddedTS/u-boot-imx ),效果很好。我目前也在使用参考内核 (
https://github.com/embeddedTS/linux-tsimx ),它也运行良好(使用无 initrd 的 Buildroot 映像进行测试)。
为了允许启动生成 /boot/extlinux/extlinux.conf 文件的 Guix 系统,我调整了来自 U-Boot 的 includes/configs/ts7970.h 文件,并为我的 u-boot-
ts7970- q-2g-1000mhz-c封装:
(add-after 'unpack 'patch-u-boot
(lambda _
(subs
titute* (find-files "include/configs" "^ts[0-9]{4}\.h$")
;; Default to boot a standard zImage instead of a uImage.
(("/boot/uImage")
"/boot/zImage")
(("uimage")
"zimage")
(("bootm \$\{loadaddr}")
"bootz ${loadaddr}")
;; This reference DTB is not available in mainline.
(("ts7970-revf.dtb")
"ts7970.dtb")
;; Enable support for DISTRO_DEFAULTS, which enables to
;; use 'sysboot' to boot Guix System. Also enable
;; "standard" boot commands for dealing with discovery and
;; booting of syslinux configurations (extlinux.conf).
;; Disable the stock CONFIG_BOOTCOMMAND to avoid a
;; redefinition error.
(("CONFIG_BOOTCOMMAND")
"CONFIG_BOOTCOMMAND_DISABLED")
(("CONFIG_BOOTDELAY")
"CONFIG_BOOTDELAY_DISABLED")
;; Inspired by include/configs/embestmx6boards.h
(("#define CONFIG_EXTRA_ENV_SETTINGS.*" anchor)
(string-append
"#include
nn"
"#define MEM_LAYOUT_ENV_SETTINGS \n"
" "bootm_size=0x10000000\0" \n"
" "ramdisk_addr_r=0x10800000\0"\n"
" "kernel_addr_r=0x12000000\0" \n"
" "fdt_addr_r=0x18000000\0" \n"
" "scriptaddr=0x18100000\0" \n"
" "pxefile_addr_r=0x18200000\0" nn"
"#define BOOT_TARGET_DEVICES(func) \n"
" func(MMC, mmc, 0) \n"
" func(MMC, mmc, 1) \n"
" func(SATA, sata, 0) \n"
" func(USB, usb, 0) \n"
" func(PXE, pxe, na) \n"
" func(DHCP, dhcp, na)nn"
"#include nn"
anchor
;; Sadly, the user config CONFIG_DEFAULT_FDT_FILE did
;; not exist in that older U-Boot, a placeholder is
;; added here, to be substituted in each TS U-Boot board
;; package.
" "fdtfile=DEFAULT_FDT_FILE\0" \n"
" MEM_LAYOUT_ENV_SETTINGS \n"
" BOOTENV \n")))))
在上面的代码片段中,您可以看到我使用的内存映射。将操作系统闪存到 SD 卡并尝试启动,它似乎很早就(或在)尝试运行 init 程序时崩溃,对于 Guix 系统,该程序是用 Scheme 编写的并使用 Guile 运行(请参阅随附的启动.log),结尾为:
[...]
[ 7.444504] sdhci-esdhc-imx 2190000.usdhc: card claims to support voltages below defined range
[ 7.461422] mmc0: new SDIO card at address 0001
[ 8.222216] mmcblk2: mmc2:0001 MMC04G 3.60 GiB
[ 8.223894] Freeing unused kernel memory: 1024K (80e00000 - 80f00000)
[ 8.234222] mmcblk2boot0: mmc2:0001 MMC04G partition 1 16.0 MiB
GC Warning: pthread_getattr_np or[ 8.240616] mmcblk2boot1: mmc2:0001 MMC04G partition 2 16.0 MiB
pthread_attr_getstack failed for[ 8.249392] mmcblk2rpmb: mmc2:0001 MMC04G partition 3 128 KiB
main thread
GC Warning: Couldn't read /proc/stat
[ 8.314248] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[ 8.314248]
[ 8.323403] CPU1: stopping
[ 8.326121] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.9.11-tsimx #1
[ 8.332565] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 8.339094] Backtrace:
[ 8.341580] [<80111d48>] (dump_backtrace) from [<80111f38>] (show_stack+0x18/0x1c)
[ 8.349156] r7:00000000 r6:20000193 r5:00000000 r4:80f2fecc
[ 8.354830] [<80111f20>] (show_stack) from [<8054d61c>] (dump_stack+0x80/0x9c)
[ 8.362061] [<8054d59c>] (dump_stack) from [<8010d8dc>] (handle_IPI+0xe0/0x178)
[ 8.369373] r7:00000000 r6:d80abf18 r5:00000001 r4:80e7f034
[ 8.375040] [<8010d7fc>] (handle_IPI) from [<801014d8>] (gic_handle_irq+0x70/0x78)
[ 8.382613] r7:f4a01100 r6:80f0358c r5:f4a00100 r4:d80abf18
[ 8.388284] [<80101468>] (gic_handle_irq) from [<80a0a34c>] (__irq_svc+0x6c/0xa8)
[ 8.395769] Exception stack(0xd80abf18 to 0xd80abf60)
[ 8.400823] bf00: 00000000 dad16bc0
[ 8.409006] bf20: 00000001 d80aa000 f01cf055 ef8c69a3 dad131a8 00000001 00000001 00000004
[ 8.417189] bf40: 00000001 d80abf9c d80abf28 d80abf68 8018eb00 80826374 20000013 ffffffff
[ 8.425370] r7:d80abf4c r6:ffffffff r5:20000013 r4:80826374
[ 8.431039] [<80826284>] (cpuidle_enter_state) from [<80826488>] (cpuidle_enter+0x1c/0x20)
[ 8.439308] r10:d80abfc0 r9:80e801a0 r8:80f030f4 r7:d80aa000 r6:00000001 r5:80f08cd4
[ 8.447138] r4:dad131a8
[ 8.449686] [<8082646c>] (cpuidle_enter) from [<80165ccc>] (call_cpuidle+0x3c/0x40)
[ 8.457351] [<80165c90>] (call_cpuidle) from [<80165f48>] (cpu_startup_entry+0x188/0x1a8)
[ 8.465535] [<80165dc0>] (cpu_startup_entry) from [<8010d5b8>] (secondary_start_kernel+0x134/0x164)
[ 8.474582] r7:80f8d320 r4:80f14490
[ 8.478166] [<8010d484>] (secondary_start_kernel) from [<1010156c>] (0x1010156c)
[ 8.485566] r7:80f8d320 r6:10c03c7d r5:00000051 r4:6809406a
[ 8.491228] CPU3: stopping
[ 8.493943] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.9.11-tsimx #1
[ 8.500385] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 8.506912] Backtrace:
[ 8.509386] [<80111d48>] (dump_backtrace) from [<80111f38>] (show_stack+0x18/0x1c)
[ 8.516960] r7:00000000 r6:20000193 r5:00000000 r4:80f2fecc
[ 8.522630] [<80111f20>] (show_stack) from [<8054d61c>] (dump_stack+0x80/0x9c)
[ 8.529860] [<8054d59c>] (dump_stack) from [<8010d8dc>] (handle_IPI+0xe0/0x178)
[ 8.537172] r7:00000000 r6:d80aff18 r5:00000003 r4:80e7f034
[ 8.542837] [<8010d7fc>] (handle_IPI) from [<801014d8>] (gic_handle_irq+0x70/0x78)
[ 8.550411] r7:f4a01100 r6:80f0358c r5:f4a00100 r4:d80aff18
[ 8.556077] [<80101468>] (gic_handle_irq) from [<80a0a34c>] (__irq_svc+0x6c/0xa8)
[ 8.563561] Exception stack(0xd80aff18 to 0xd80aff60)
[ 8.568615] ff00: 00000000 00000001
[ 8.576797] ff20: 59eaf000 dad2fec0 f01cef08 ef8c5f38 dad2f1a8 00000000 00000001 00000000
[ 8.584980] ff40: 00000001 d80aff9c d80aff68 d80aff68 80826350 80826374 60000113 ffffffff
[ 8.593161] r7:d80aff4c r6:ffffffff r5:60000113 r4:80826374
[ 8.598827] [<80826284>] (cpuidle_enter_state) from [<80826488>] (cpuidle_enter+0x1c/0x20)
[ 8.607096] r10:d80affc0 r9:80e801a0 r8:80f030f4 r7:d80ae000 r6:00000003 r5:80f08cd4
[ 8.614926] r4:dad2f1a8
[ 8.617469] [<8082646c>] (cpuidle_enter) from [<80165ccc>] (call_cpuidle+0x3c/0x40)
[ 8.625133] [<80165c90>] (call_cpuidle) from [<80165f48>] (cpu_startup_entry+0x188/0x1a8)
[ 8.633317] [<80165dc0>] (cpu_startup_entry) from [<8010d5b8>] (secondary_start_kernel+0x134/0x164)
[ 8.642364] r7:80f8d320 r4:80f14490
[ 8.645945] [<8010d484>] (secondary_start_kernel) from [<1010156c>] (0x1010156c)
[ 8.653345] r7:80f8d320 r6:10c03c7d r5:00000051 r4:6809406a
[ 8.659007] CPU0: stopping
[ 8.661722] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.9.11-tsimx #1
[ 8.668164] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 8.674692] Backtrace:
[ 8.677167] [<80111d48>] (dump_backtrace) from [<80111f38>] (show_stack+0x18/0x1c)
[ 8.684742] r7:00000000 r6:20000193 r5:00000000 r4:80f2fecc
[ 8.690411] [<80111f20>] (show_stack) from [<8054d61c>] (dump_stack+0x80/0x9c)
[ 8.697641] [<8054d59c>] (dump_stack) from [<8010d8dc>] (handle_IPI+0xe0/0x178)
[ 8.704954] r7:00000000 r6:80f01ee0 r5:00000000 r4:80e7f034
[ 8.710620] [<8010d7fc>] (handle_IPI) from [<801014d8>] (gic_handle_irq+0x70/0x78)
[ 8.718193] r7:f4a01100 r6:80f0358c r5:f4a00100 r4:80f01ee0
[ 8.723860] [<80101468>] (gic_handle_irq) from [<80a0a34c>] (__irq_svc+0x6c/0xa8)
[ 8.731344] Exception stack(0x80f01ee0 to 0x80f01f28)
[ 8.736403] 1ee0: 00000000 dad08bc0 00000001 80f00000 f01cf2f0 efe6458b dad051a8 00000001
[ 8.744585] 1f00: 00000001 00000004 00000001 80f01f64 80f01ef0 80f01f30 8018eb00 80826374
[ 8.752764] 1f20: 20000013 ffffffff
[ 8.756257] r7:80f01f14 r6:ffffffff r5:20000013 r4:80826374
[ 8.761923] [<80826284>] (cpuidle_enter_state) from [<80826488>] (cpuidle_enter+0x1c/0x20)
[ 8.770192] r10:80f01f88 r9:80e801a0 r8:80f030f4 r7:80f00000 r6:00000000 r5:80f08cd4
[ 8.778023] r4:dad051a8
[ 8.780566] [<8082646c>] (cpuidle_enter) from [<80165ccc>] (call_cpuidle+0x3c/0x40)
[ 8.788231] [<80165c90>] (call_cpuidle) from [<80165f48>] (cpu_startup_entry+0x188/0x1a8)
[ 8.796415] [<80165dc0>] (cpu_startup_entry) from [<80a04e38>] (rest_init+0x78/0x90)
[ 8.804160] r7:80f030c0 r4:00000002
[ 8.807744] [<80a04dc0>] (rest_init) from [<80e00c70>] (start_kernel+0x318/0x37c)
[ 8.815230] r5:00000001 r4:80f8d04c
[ 8.818811] [<80e00958>] (start_kernel) from [<1000807c>] (0x1000807c)
[ 8.825351] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[ 8.825351]