Linux 内核调试 六:qemu-system-arm仿真vexpress-a9

参考资料:
https://zhuanlan.zhihu.com/p/340362172
https://www.jianshu.com/p/91baa4d140a2
https://blog.csdn.net/aggresss/article/details/54942848
https://qemu.readthedocs.io/en/latest/system/arm/vexpress.html
https://github.com/openLuat/LuatOS-qemu-vexpress-a9
https://blog.csdn.net/u013738338/article/details/82961049
https://blog.csdn.net/u013738338/article/details/94409329
https://blog.csdn.net/u013738338/article/details/94409554

为什么选择 vexpress-a9 开发板?

因为 vexpress-a9 的资料和讨论最多,所以我们选择这个开发板来进行模拟。

vexpress系列(全称Versatile Express Family)是ARM自己推出的开发板,主要是方便SOC厂商设计、验证和测试自己的SOC芯片设计用的。

一、vexpress-a9 硬件

http://myir-tech.com/soft.asp?id=895

二、编译交叉工具链

编译器版本:gcc-linaro-4.9.4-2017.01

三、uboot

uboot版本:u-boot-2016.03

1、设置编译工具链

# 注释
# set default to nothing for native builds
#ifeq ($(HOSTARCH),$(ARCH))
#CROSS_COMPILE ?=
#endif

# 添加
ARCH ?= arm
CROSS_COMPILE ?= /home/onlylove/My/arm-gcc/gcc-4.9.4/bin/arm-linux-gnueabihf-

2、配置uboot

1、查看可用配置文件

onlylove@ubuntu:~/My/uboot/u-boot-2016.03/configs$ ls vexpress* -l
-rw-rw-r-- 1 onlylove onlylove 524 Mar 14  2016 vexpress_aemv8a_dram_defconfig
-rw-rw-r-- 1 onlylove onlylove 515 Mar 14  2016 vexpress_aemv8a_juno_defconfig
-rw-rw-r-- 1 onlylove onlylove 519 Mar 14  2016 vexpress_aemv8a_semi_defconfig
-rw-rw-r-- 1 onlylove onlylove 471 Mar 14  2016 vexpress_ca15_tc2_defconfig
-rw-rw-r-- 1 onlylove onlylove 468 Mar 14  2016 vexpress_ca5x2_defconfig
-rw-rw-r-- 1 onlylove onlylove 468 Mar 14  2016 vexpress_ca9x4_defconfig
onlylove@ubuntu:~/My/uboot/u-boot-2016.03/configs$

2、配置

onlylove@ubuntu:~/My/uboot/u-boot-2016.03$ make vexpress_ca9x4_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
In file included from scripts/kconfig/zconf.tab.c:2534:
scripts/kconfig/confdata.c: In function ‘conf_write’:
scripts/kconfig/confdata.c:771:19: warning: ‘%s’ directive writing likely 7 or more bytes into a region of size between 1 and 4097 [-Wformat-overflow=]
  771 |  sprintf(newname, "%s%s", dirname, basename);
      |                   ^~~~~~
scripts/kconfig/confdata.c:771:19: note: assuming directive output of 7 bytes
In file included from /usr/include/stdio.h:867,
                 from scripts/kconfig/zconf.tab.c:84:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:36:10: note: ‘__builtin___sprintf_chk’ output 1 or more bytes (assuming 4104) into a destination of size 4097
   36 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   37 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from scripts/kconfig/zconf.tab.c:2534:
scripts/kconfig/confdata.c:774:20: warning: ‘.tmpconfig.’ directive writing 11 bytes into a region of size between 1 and 4097 [-Wformat-overflow=]
  774 |   sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
      |                    ^~~~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:867,
                 from scripts/kconfig/zconf.tab.c:84:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:36:10: note: ‘__builtin___sprintf_chk’ output between 13 and 4119 bytes into a destination of size 4097
   36 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   37 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
onlylove@ubuntu:~/My/uboot/u-boot-2016.03$

3、uboot编译

onlylove@ubuntu:~/My/uboot/u-boot-2016.03$ make
  CHK     include/config/uboot.release
  CHK     include/generated/version_autogenerated.h
  CHK     include/generated/timestamp_autogenerated.h
  UPD     include/generated/timestamp_autogenerated.h
  CHK     include/generated/generic-asm-offsets.h
  CHK     include/generated/asm-offsets.h
  HOSTCC  tools/mkenvimage.o
  HOSTLD  tools/mkenvimage
  HOSTCC  tools/aisimage.o
  HOSTCC  tools/atmelimage.o
  WRAP    tools/common/bootm.c
  HOSTCC  tools/common/bootm.o
  HOSTCC  tools/default_image.o
  WRAP    tools/lib/fdtdec_common.c
  HOSTCC  tools/lib/fdtdec_common.o
  WRAP    tools/lib/fdtdec.c
  HOSTCC  tools/lib/fdtdec.o
  HOSTCC  tools/fit_common.o
  HOSTCC  tools/fit_image.o
  HOSTCC  tools/gpimage.o
  HOSTCC  tools/gpimage-common.o
  WRAP    tools/common/image-fit.c
  HOSTCC  tools/common/image-fit.o
  HOSTCC  tools/image-host.o
  WRAP    tools/common/image.c
  HOSTCC  tools/common/image.o
  HOSTCC  tools/imagetool.o
  HOSTCC  tools/imximage.o
  HOSTCC  tools/kwbimage.o
  WRAP    tools/lib/md5.c
  HOSTCC  tools/lib/md5.o
  HOSTCC  tools/lpc32xximage.o
  HOSTCC  tools/mxsimage.o
  HOSTCC  tools/omapimage.o
  HOSTCC  tools/pblimage.o
  HOSTCC  tools/pbl_crc32.o
  WRAP    tools/lib/rc4.c
  HOSTCC  tools/lib/rc4.o
  HOSTCC  tools/rkcommon.o
  HOSTCC  tools/rkimage.o
  HOSTCC  tools/rksd.o
  HOSTCC  tools/rkspi.o
  HOSTCC  tools/socfpgaimage.o
  WRAP    tools/lib/sha256.c
  HOSTCC  tools/lib/sha256.o
  WRAP    tools/common/hash.c
  HOSTCC  tools/common/hash.o
  HOSTCC  tools/ublimage.o
  HOSTCC  tools/zynqimage.o
  WRAP    tools/lib/libfdt/fdt.c
  HOSTCC  tools/lib/libfdt/fdt.o
  WRAP    tools/lib/libfdt/fdt_ro.c
  HOSTCC  tools/lib/libfdt/fdt_ro.o
  WRAP    tools/lib/libfdt/fdt_rw.c
  HOSTCC  tools/lib/libfdt/fdt_rw.o
  WRAP    tools/lib/libfdt/fdt_strerror.c
  HOSTCC  tools/lib/libfdt/fdt_strerror.o
  WRAP    tools/lib/libfdt/fdt_wip.c
  HOSTCC  tools/lib/libfdt/fdt_wip.o
  WRAP    tools/lib/libfdt/fdt_region.c
  HOSTCC  tools/lib/libfdt/fdt_region.o
  HOSTCC  tools/dumpimage.o
  HOSTLD  tools/dumpimage
  HOSTCC  tools/mkimage.o
  HOSTLD  tools/mkimage
  HOSTCC  tools/proftool
  HOSTCC  tools/fdtgrep.o
  HOSTLD  tools/fdtgrep
  LD      arch/arm/cpu/built-in.o
  CC      arch/arm/cpu/armv7/cache_v7.o
  CC      arch/arm/cpu/armv7/cpu.o
  CC      arch/arm/cpu/armv7/cp15.o
  CC      arch/arm/cpu/armv7/syslib.o
  LD      arch/arm/cpu/armv7/built-in.o
  AS      arch/arm/cpu/armv7/start.o
  AS      arch/arm/lib/vectors.o
  AS      arch/arm/lib/crt0.o
  AS      arch/arm/lib/relocate.o
  CC      arch/arm/lib/bootm-fdt.o
  CC      arch/arm/lib/bootm.o
  CC      arch/arm/lib/sections.o
  CC      arch/arm/lib/stack.o
  CC      arch/arm/lib/interrupts.o
  CC      arch/arm/lib/reset.o
  CC      arch/arm/lib/cache.o
  CC      arch/arm/lib/cache-cp15.o
  LD      arch/arm/lib/built-in.o
  AR      arch/arm/lib/lib.a
  CC      arch/arm/lib/eabi_compat.o
  CC      board/armltd/vexpress/vexpress_common.o
  LD      board/armltd/vexpress/built-in.o
  CC      cmd/boot.o
  CC      cmd/bootm.o
  CC      cmd/help.o
  CC      cmd/version.o
  CC      cmd/source.o
  CC      cmd/bdinfo.o
  CC      cmd/echo.o
  CC      cmd/elf.o
  CC      cmd/exit.o
  CC      cmd/ext4.o
  CC      cmd/ext2.o
  CC      cmd/fat.o
  CC      cmd/fdt.o
  CC      cmd/flash.o
  CC      cmd/fs.o
  CC      cmd/load.o
  CC      cmd/mem.o
  CC      cmd/mii.o
  CC      cmd/mmc.o
  CC      cmd/net.o
  CC      cmd/part.o
  CC      cmd/pcmcia.o
  CC      cmd/pxe.o
  CC      cmd/test.o
  CC      cmd/nvedit.o
  CC      cmd/disk.o
  LD      cmd/built-in.o
  CC      common/init/board_init.o
  LD      common/init/built-in.o
  CC      common/main.o
  CC      common/exports.o
  CC      common/hash.o
  CC      common/cli_hush.o
  CC      common/autoboot.o
  CC      common/board_f.o
  CC      common/board_r.o
  CC      common/bootm.o
  CC      common/bootm_os.o
  CC      common/env_attr.o
  CC      common/env_callback.o
  CC      common/env_flags.o
  CC      common/env_flash.o
  CC      common/fdt_support.o
  CC      common/miiphyutil.o
  CC      common/flash.o
  CC      common/splash.o
  CC      common/menu.o
  CC      common/env_common.o
  CC      common/console.o
  CC      common/dlmalloc.o
  CC      common/image.o
  CC      common/image-fdt.o
  CC      common/memsize.o
  CC      common/stdio.o
  CC      common/cli_simple.o
  CC      common/cli.o
  CC      common/cli_readline.o
  CC      common/command.o
  CC      common/s_record.o
  CC      common/xyzModem.o
  LD      common/built-in.o
  CC      common/env_embedded.o
  CC      disk/part.o
  CC      disk/part_dos.o
  CC      disk/part_efi.o
  LD      disk/built-in.o
  LD      drivers/adc/built-in.o
  LD      drivers/block/built-in.o
  CC      drivers/crypto/fsl/sec.o
  LD      drivers/crypto/fsl/built-in.o
  LD      drivers/crypto/rsa_mod_exp/built-in.o
  LD      drivers/crypto/built-in.o
  LD      drivers/dfu/built-in.o
  LD      drivers/hwmon/built-in.o
  CC      drivers/input/input.o
  LD      drivers/input/built-in.o
  LD      drivers/memory/built-in.o
  LD      drivers/misc/built-in.o
  CC      drivers/pcmcia/tqm8xx_pcmcia.o
  LD      drivers/pcmcia/built-in.o
  LD      drivers/pwm/built-in.o
  CC      drivers/rtc/date.o
  LD      drivers/rtc/built-in.o
  LD      drivers/soc/built-in.o
  LD      drivers/sound/built-in.o
  LD      drivers/thermal/built-in.o
  LD      drivers/timer/built-in.o
  LD      drivers/tpm/built-in.o
  LD      drivers/twserial/built-in.o
  LD      drivers/video/bridge/built-in.o
  LD      drivers/video/built-in.o
  LD      drivers/watchdog/built-in.o
  LD      drivers/built-in.o
  LD      drivers/dma/built-in.o
  LD      drivers/gpio/built-in.o
  LD      drivers/i2c/built-in.o
  CC      drivers/mmc/arm_pl180_mmci.o
  CC      drivers/mmc/mmc.o
  CC      drivers/mmc/mmc_write.o
  LD      drivers/mmc/built-in.o
  CC      drivers/mtd/cfi_flash.o
  LD      drivers/mtd/built-in.o
  LD      drivers/mtd/onenand/built-in.o
  LD      drivers/mtd/spi/built-in.o
  CC      drivers/net/smc911x.o
  LD      drivers/net/built-in.o
  LD      drivers/net/phy/built-in.o
  LD      drivers/pci/built-in.o
  LD      drivers/power/built-in.o
  LD      drivers/power/battery/built-in.o
  LD      drivers/power/fuel_gauge/built-in.o
  LD      drivers/power/mfd/built-in.o
  LD      drivers/power/pmic/built-in.o
  LD      drivers/power/regulator/built-in.o
  CC      drivers/serial/serial.o
  CC      drivers/serial/serial_pl01x.o
  LD      drivers/serial/built-in.o
  CC      drivers/spi/spi.o
  LD      drivers/spi/built-in.o
  LD      drivers/usb/dwc3/built-in.o
  LD      drivers/usb/emul/built-in.o
  LD      drivers/usb/eth/built-in.o
  LD      drivers/usb/gadget/built-in.o
  LD      drivers/usb/gadget/udc/built-in.o
  LD      drivers/usb/host/built-in.o
  LD      drivers/usb/musb-new/built-in.o
  LD      drivers/usb/musb/built-in.o
  LD      drivers/usb/phy/built-in.o
  LD      drivers/usb/ulpi/built-in.o
  CC      fs/fs.o
  CC      fs/ext4/ext4fs.o
  CC      fs/ext4/ext4_common.o
  CC      fs/ext4/dev.o
  LD      fs/ext4/built-in.o
  CC      fs/fat/fat.o
  CC      fs/fat/file.o
  LD      fs/fat/built-in.o
  LD      fs/built-in.o
  CC      lib/libfdt/fdt.o
  CC      lib/libfdt/fdt_ro.o
  CC      lib/libfdt/fdt_rw.o
  CC      lib/libfdt/fdt_strerror.o
  CC      lib/libfdt/fdt_sw.o
  CC      lib/libfdt/fdt_wip.o
  CC      lib/libfdt/fdt_empty_tree.o
  CC      lib/libfdt/fdt_addresses.o
  CC      lib/libfdt/fdt_region.o
  LD      lib/libfdt/built-in.o
  CC      lib/zlib/zlib.o
  LD      lib/zlib/built-in.o
  CC      lib/crc7.o
  CC      lib/crc8.o
  CC      lib/crc16.o
  CC      lib/gunzip.o
  CC      lib/initcall.o
  CC      lib/lmb.o
  CC      lib/ldiv.o
  CC      lib/net_utils.o
  CC      lib/qsort.o
  CC      lib/rc4.o
  CC      lib/strmhz.o
  CC      lib/list_sort.o
  CC      lib/hashtable.o
  CC      lib/errno.o
  CC      lib/display_options.o
  CC      lib/crc32.o
  CC      lib/ctype.o
  CC      lib/div64.o
  CC      lib/hang.o
  CC      lib/linux_compat.o
  CC      lib/linux_string.o
  CC      lib/membuff.o
  CC      lib/slre.o
  CC      lib/string.o
  CC      lib/time.o
  CC      lib/uuid.o
  CC      lib/vsprintf.o
  CC      lib/panic.o
  CC      lib/strto.o
  LD      lib/built-in.o
  CC      net/checksum.o
  CC      net/arp.o
  CC      net/bootp.o
  CC      net/eth_legacy.o
  CC      net/eth_common.o
  CC      net/net.o
  CC      net/ping.o
  CC      net/tftp.o
  LD      net/built-in.o
  LD      test/built-in.o
  LD      test/dm/built-in.o
  CC      examples/standalone/stubs.o
  LD      examples/standalone/libstubs.o
  CC      examples/standalone/hello_world.o
  LD      examples/standalone/hello_world
  CC      examples/standalone/smc911x_eeprom.o
  LD      examples/standalone/smc911x_eeprom
  OBJCOPY examples/standalone/hello_world.srec
  OBJCOPY examples/standalone/smc911x_eeprom.srec
  OBJCOPY examples/standalone/hello_world.bin
  OBJCOPY examples/standalone/smc911x_eeprom.bin
  LDS     u-boot.lds
  LD      u-boot
  OBJCOPY u-boot.srec
  OBJCOPY u-boot-nodtb.bin
  COPY    u-boot.bin
  SYM     u-boot.sym
  CFG     u-boot.cfg
onlylove@ubuntu:~/My/uboot/u-boot-2016.03$

4、异常解决

1、/usr/include/libfdt_env.h:27:30: error: conflicting types for ‘fdt64_t’

解决方案是:卸载 libfdt-dev 库,让uboot强制使用内部 libfdt。

sudo apt-get remove libfdt-dev

5、测试

qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot -nographic
onlylove@ubuntu:~/My/vexpress-a9$ ./qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot -nographic


U-Boot 2016.03 (Jan 20 2022 - 18:01:32 -0800)

DRAM:  256 MiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC:   MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   smc911x-0
Hit any key to stop autoboot:  0 
MMC Device 1 not found
no mmc device at slot 1
Card did not respond to voltage select!
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
BOOTP broadcast 1
DHCP client bound to address 10.0.2.15 (2 ms)
*** Warning: no boot file name; using '0A00020F.img'
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename '0A00020F.img'.
Load address: 0x80008000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: pxeuuid
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/01-52-54-00-12-34-56
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/01-52-54-00-12-34-56'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A00020F
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A00020F'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A00020
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A00020'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A0002
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A0002'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A000
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A000'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A00
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A00'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A0
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A0'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0A
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0A'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/0'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default-arm
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/default-arm'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'pxelinux.cfg/default'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
Config file not found
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
BOOTP broadcast 1
DHCP client bound to address 10.0.2.15 (0 ms)
Using smc911x-0 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'boot.scr.uimg'.
Load address: 0x88000000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
smc911x: MAC 52:54:00:12:34:56
smc911x: MAC 52:54:00:12:34:56
Wrong Image Format for bootm command
ERROR: can't get kernel image!
=> 
=> 
=> 
=> help
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
bootelf - Boot from an ELF image in memory
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
bootvx  - Boot vxWorks from an ELF image
bootz   - boot Linux zImage image from memory
cmp     - memory compare
cp      - memory copy
crc32   - checksum calculation
dhcp    - boot image via network using DHCP/TFTP protocol
echo    - echo args to console
env     - environment handling commands
erase   - erase FLASH memory
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
ext4load- load binary file from a Ext4 filesystem
ext4ls  - list files in a directory (default /)
ext4size- determine a file's size
false   - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fatsize - determine a file's size
fdt     - flattened device tree utility commands
flinfo  - print FLASH memory information
fstype  - Look up a filesystem type
go      - start application at address 'addr'
help    - print command description/usage
iminfo  - print header information for application image
load    - load binary file from a filesystem
loop    - infinite loop on address range
ls      - list files in a directory (default /)
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mw      - memory write (fill)
nm      - memory modify (constant address)
part    - disk partition related commands
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
pxe     - commands to get and boot from pxe files
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
save    - save file to a filesystem
saveenv - save environment variables to persistent storage
setenv  - set environment variables
showvar - print local hushshell variables
size    - determine a file's size
source  - run script from memory
sysboot - command to get and boot from syslinux files
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true    - do nothing, successfully
version - print monitor, compiler and linker version
=> 

四、linux

linux版本:linux-4.1.15

1、设置编译工具链和平台架构

设置前:

ARCH		?= $(SUBARCH)
CROSS_COMPILE	?= $(CONFIG_CROSS_COMPILE:"%"=%)

设置后:

#ARCH		?= $(SUBARCH)
#CROSS_COMPILE	?= $(CONFIG_CROSS_COMPILE:"%"=%)
ARCH		?= arm
CROSS_COMPILE	?= /home/onlylove/My/arm-gcc/imx6ull/bin/arm-linux-gnueabihf-

2、配置内核

1、查看配置文件

onlylove@ubuntu:~/My/linux/linux-4.1.15/arch/arm/configs$ pwd
/home/onlylove/My/linux/linux-4.1.15/arch/arm/configs
onlylove@ubuntu:~/My/linux/linux-4.1.15/arch/arm/configs$ ls
acs5k_defconfig            corgi_defconfig        iop13xx_defconfig     multi_v7_defconfig   pxa168_defconfig        spear6xx_defconfig
acs5k_tiny_defconfig       davinci_all_defconfig  iop32x_defconfig      mv78xx0_defconfig    pxa255-idp_defconfig    spitz_defconfig
am200epdkit_defconfig      dove_defconfig         iop33x_defconfig      mvebu_v5_defconfig   pxa3xx_defconfig        sunxi_defconfig
armadillo800eva_defconfig  ebsa110_defconfig      ixp4xx_defconfig      mvebu_v7_defconfig   pxa910_defconfig        tct_hammer_defconfig
assabet_defconfig          efm32_defconfig        jornada720_defconfig  mxs_defconfig        qcom_defconfig          tegra_defconfig
at91_dt_defconfig          em_x270_defconfig      keystone_defconfig    neponset_defconfig   raumfeld_defconfig      trizeps4_defconfig
axm55xx_defconfig          ep93xx_defconfig       ks8695_defconfig      netwinder_defconfig  realview_defconfig      u300_defconfig
badge4_defconfig           eseries_pxa_defconfig  kzm9g_defconfig       netx_defconfig       realview-smp_defconfig  u8500_defconfig
bcm2835_defconfig          exynos_defconfig       lart_defconfig        nhk8815_defconfig    rpc_defconfig           versatile_defconfig
bcm_defconfig              ezx_defconfig          lpc32xx_defconfig     nuc910_defconfig     s3c2410_defconfig       vexpress_defconfig
bockw_defconfig            footbridge_defconfig   lpd270_defconfig      nuc950_defconfig     s3c6400_defconfig       viper_defconfig
cerfcube_defconfig         h3600_defconfig        lubbock_defconfig     nuc960_defconfig     s5pv210_defconfig       vt8500_v6_v7_defconfig
clps711x_defconfig         h5000_defconfig        magician_defconfig    omap1_defconfig      sama5_defconfig         xcep_defconfig
cm_x2xx_defconfig          hackkit_defconfig      mainstone_defconfig   omap2plus_defconfig  shannon_defconfig       zeus_defconfig
cm_x300_defconfig          hisi_defconfig         marzen_defconfig      orion5x_defconfig    shmobile_defconfig
cns3420vb_defconfig        imote2_defconfig       mini2440_defconfig    palmz72_defconfig    simpad_defconfig
colibri_pxa270_defconfig   imx_v4_v5_defconfig    mmp2_defconfig        pcm027_defconfig     socfpga_defconfig
colibri_pxa300_defconfig   imx_v6_v7_defconfig    moxart_defconfig      pleb_defconfig       spear13xx_defconfig
collie_defconfig           integrator_defconfig   multi_v5_defconfig    prima2_defconfig     spear3xx_defconfig
onlylove@ubuntu:~/My/linux/linux-4.1.15/arch/arm/configs$

2、内核配置

onlylove@ubuntu:~/My/linux/linux-4.1.15$ make vexpress_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
In file included from scripts/kconfig/zconf.tab.c:2534:
scripts/kconfig/confdata.c: In function ‘conf_write’:
scripts/kconfig/confdata.c:773:19: warning: ‘%s’ directive writing likely 7 or more bytes into a region of size between 1 and 4097 [-Wformat-overflow=]
  773 |  sprintf(newname, "%s%s", dirname, basename);
      |                   ^~~~~~
scripts/kconfig/confdata.c:773:19: note: assuming directive output of 7 bytes
In file included from /usr/include/stdio.h:867,
                 from scripts/kconfig/zconf.tab.c:84:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:36:10: note: ‘__builtin___sprintf_chk’ output 1 or more bytes (assuming 4104) into a destination of size 4097
   36 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   37 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from scripts/kconfig/zconf.tab.c:2534:
scripts/kconfig/confdata.c:776:20: warning: ‘.tmpconfig.’ directive writing 11 bytes into a region of size between 1 and 4097 [-Wformat-overflow=]
  776 |   sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
      |                    ^~~~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:867,
                 from scripts/kconfig/zconf.tab.c:84:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:36:10: note: ‘__builtin___sprintf_chk’ output between 13 and 4119 bytes into a destination of size 4097
   36 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   37 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
onlylove@ubuntu:~/My/linux/linux-4.1.15$

3、内核编译

make -j4

日志内容太多,不进行记录。

五、Busybox

参考资料:

http://www.lujun.org.cn/?p=3533

http://www.lujun.org.cn/?p=3574

http://www.lujun.org.cn/?p=3590

busybox版本:busybox-1.35.0

1、配置交叉编译工具链

#ARCH ?= $(SUBARCH)		# 修改前
ARCH ?= arm						# 修改后


#CROSS_COMPILE ?=			# 修改前
CROSS_COMPILE ?= /home/onlylove/My/arm-gcc/gcc-4.9.4/bin/arm-linux-gnueabihf-		# 修改后

2、使用make menuconfig进行配置

配置选项说明:

1、defconfig:缺省配置,也就是默认配置选项。

2、allyesconfig:全选配置,也就是选中 busybox 的所有功能。

3、allnoconfig:最小配置

make menuconfig 配置:

注:参考正点原子相关文档


版权声明:本文为OnlyLove_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。