
1.2.1 Booting message
U-Boot 2020.07 (Mar 21 2023 - 06:04:28 +0000) // U-boot version과 빌드 시각 //보드 스펙 sheet 사양이 나옴 MMC: sdhci@40190000: 0 // MMC/SD 카드 컨트롤러 초기화 결과 Loading Environment from MMC... OK //U-boot 환경변수를 SD카드에서 읽어옴 In: serial@40700000 //표준 입력 출력 에러 장치를 UART로 설정 Out: serial@40700000 Err: serial@40700000 Net: eth0: ethernet@40120000 [PRIME], eth1: ethernet@40130000 Hit any key to stop autoboot: 0 //자동 부팅 카운트다운
1.2.2 printenv
arch=arm baudrate=115200 bmp_addr_r=0x8D200000 board=ma35d1 board_name=ma35d1 boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr ${fdtcontroladdr};fi;load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootaa64.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf} boot_net_usb_start=usb start boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg boot_scripts=boot.scr.uimg boot.scr boot_syslinux_conf=extlinux/extlinux.conf boot_targets=mmc0 mmc1 ubifs0 legacy_mmc0 nand0 mtd0 bootcmd=run distro_bootcmd bootcmd_legacy_mmc0=run mmcboot bootcmd_mmc0=devnum=0; run mmc_boot bootcmd_mmc1=devnum=1; run mmc_boot bootcmd_mtd0=run spinandboot bootcmd_nand0=run nandboot bootcmd_ubifs0=devnum=0; run ubifs_boot bootdelay=1 bootfile=Image bootubipart=rootfs bootubivol=rootfs cpu=armv8 distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/ eth1addr=00:11:22:33:44:66 ethact=ethernet@40120000 ethaddr=00:11:22:33:44:55 ethprime=eth0 fdt_addr_r=0x85000000 fdtcontroladdr=864eead0 kernel_addr_r=0x80080000 kernelmem=248M load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0x81000000 mmc_block=mmcblk1p1 mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi mmcboot=if mmc dev 0; then echo "Booting form mmc ... ..."; setenv bootargs root=/dev/${mmc_block} rootfstype=ext4 rw rootwait console=ttyS0,115200n8 rdinit=/sbin/init mem=${kernelmem}; mmc read ${kernel_addr_r} 0x1800 0x8000; mmc read ${fdt_addr_r} 0x1600 0x80; booti ${kernel_addr_r} - ${fdt_addr_r}; fi; nand_ubiblock=4 nandboot=if test ${mtdids} = 'nand0=nand0' ; then echo "Booting from nand ... ..."; setenv bootargs noinitrd ubi.mtd=${nand_ubiblock} root=ubi0:rootfs rootfstype=ubifs rw rootwait=1 console=ttyS0,115200n8 rdinit=/sbin/init mem=${kernelmem}; nand read ${kernel_addr_r} kernel; nand read ${fdt_addr_r} device-tree; booti ${kernel_addr_r} - ${fdt_addr_r} ; fi pxefile_addr_r=0x85020000 ramdisk_addr_r=0x85030000 scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi; scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootaa64.efi; then echo Found EFI removable media binary efi/boot/bootaa64.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done scriptaddr=0x85010000 soc=nuvoton spinand_ubiblock=9 spinandboot=if test ${mtdids} = 'spi-nand0=spi-nand0' ; then echo "Booting from spinand ... ..."; mtd list; setenv bootargs noinitrd ubi.mtd=${spinand_ubiblock} root=ubi0:rootfs rootfstype=ubifs rw rootwait=1 console=ttyS0,115200n8 rdinit=/sbin/init mem=${kernelmem}; mtd read kernel ${kernel_addr_r}; mtd read device-tree ${fdt_addr_r}; booti ${kernel_addr_r} - ${fdt_addr_r}; fi stderr=serial@40700000 stdin=serial@40700000 stdout=serial@40700000 ubifs_boot=env exists bootubipart || env set bootubipart UBI; env exists bootubivol || env set bootubivol boot; if ubi part ${bootubipart} && ubifsmount ubi${devnum}:${bootubivol}; then devtype=ubi; run scan_dev_for_boot; fi usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi vendor=nuvoton Environment size: 4547/65532 bytes
1.2.3 run bootcmd
switch to partitions #0, OK mmc0(part 0) is current device //booting 대상 첫번째를 (mmc0)SD카드로 설정 Scanning mmc 0:1... MMC Device 1 not found no mmc device at slot 1 Partition rootfs not found! //rootFs 파티션 못찾음 switch to partitions #0, OK //mmc0의 첫 번째 파티션으로 귀환 mmc0(part 0) is current device Booting form mmc ... ... #kernel image는 6144번부터 32768 블록 읽음 MMC read: dev # 0, block # 6144, count 32768 ... 32768 blocks read: OK //DTB를 5632번부터 128 블록 읽음 MMC read: dev # 0, block # 5632, count 128 ... 128 blocks read: OK ## Flattened Device Tree blob at 85000000 Booting using the fdt blob at 0x85000000 Loading Device Tree to 00000000864df000, end 00000000864ebf5c ... OK Starting kernel
int dram_init(void)
{
return fdtdec_setup_mem_size_base();
}
// 직접 초기화 안하고 Device Tree로부터 정보 읽음
// Device Tree 안의 Memory 노드에서 시작주소(Base)와 크기(Size)를 읽음
{
aliases {
spi0 = &qspi0;
};
memory {
device_type = "memory";
reg = <0x00000000 0x80000000 0 0x07000000>; /* 112M */
//시작 주소 0x80000000 -> 사이즈 0x07000000 (112MB)
};
};
// DRAM Memory 사이즈 확인
printenv loadaddr
loadaddr=0x81000000
printenv kernel_addr_r
kernel_addr_r=0x80080000
printenv fdt_addr_r
fdt_addr_r=0x85000000
printenv ramdisk_addr_r
ramdisk_addr_r=0x85030000
printenv bootcmd
bootcmd=run distro_bootcmd