没有合适的资源?快使用搜索试试~ 我知道了~
u-boot启动linux系统的代码分析
需积分: 49 6 下载量 64 浏览量
2022-07-21
15:07:55
上传
评论
收藏 453KB DOCX 举报
温馨提示
试读
14页
u-boot启动linux系统的代码分析
资源详情
资源评论
资源推荐
u-boot 启动内核代码
一. 系统中存放的环境变量。
arch=riscv
autostart=yes
baudrate=115200
board=jh7100
board_name=jh7100
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootriscv64.efi; if fdt addr
${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_efi_bootmgr=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=dhcp mmc0
bootcmd_dhcp=devtype=dhcp; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile
${fdtfile}; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci
PXEClient:Arch:00027:UNDI:003000;setenv bootp_arch 0x1b;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r}
dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r}
${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv
efi_old_arch;setenv efi_old_vci;
bootcmd_mmc0=devnum=0; run mmc_boot
bootdelay=2
bootdir=/boot
bootenv=uEnv.txt
bootpart=0:3
cpu=fu740
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
ethact=dwmac.10020000
ethaddr=6c:cf:39:00:07:39
ext4bootenv=ext4load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootenv}
fatenv=fatload mmc ${testpart} ${loadaddr} ${testenv};env import -t ${loadaddr} ${filesize}
fdt_addr_r=0x88000000
fdtcontroladdr=ff6c96e0
fdtfile=starfive/jh7100-visionfive.dtb
fdtsetup=fdt addr ${fdtcontroladdr}
fileaddr=88300000
filesize=127ae8
importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize}
ipaddr=192.168.1.122
kernel_addr_r=0x84000000
kernel_comp_addr_r=0x90000000
kernel_comp_size=0x10000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0xa0000000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
mmcbootenv=setenv bootpart ${mmcdev}:${mmcpart};
mmc dev ${mmcdev};
if mmc rescan; then run loadbootenv && run importbootenv; run ext4bootenv && run importbootenv;
if test -n $uenvcmd; then echo Running uenvcmd ...;
run uenvcmd; fi; fi
mmcdev=0
mmcpart=3
mmcsetup=mmc part
preboot=run mmcbootenv
ramdisk_addr_r=0x88300000
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;run boot_efi_bootmgr;if test -e
${devtype} ${devnum}:${distro_bootpart} efi/boot/bootriscv64.efi; then echo Found EFI removable media binary
efi/boot/bootriscv64.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
scan_sf_for_scripts=${devtype} read ${scriptaddr} ${script_offset_f} ${script_size_f}; source ${scriptaddr}; echo SCRIPT
FAILED: continuing...
serial#=VF7100A1-2220-D008E000-0000073A
serverip=192.168.1.120
sf_boot=if sf probe ${busnum}; then devtype=sf; run scan_sf_for_scripts; fi
soc=jh7100
stderr=serial@12440000
stdin=serial@12440000
stdout=serial@12440000
testenv=u74_uEnv.txt
testpart=0:1
vendor=starfive
ver=U-Boot 2022.01-rc4-VisionFive-g0c08d335c5-dirty (Jul 11 2022 - 02:02:24 -0700)StarFive
经过:
do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START |
最终会调用到:
D:\workspace\visionsife\u-boot-simple\boot\bootm.c 中的如下函数。
int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[], int states, bootm_headers_t *images,
int boot_progress)
{
boot_fn = bootm_os_get_boot_func(images->os.os); //寻找要执行的操作系统。
}
static boot_os_fn *boot_os[] = {
{
。。。。。。
[IH_OS_LINUX] = do_bootm_linux,
。。。。。。
}
boot_os_fn *bootm_os_get_boot_func(int os)
{
return boot_os[os];
}
int do_bootm_linux(int flag, int argc, char *const argv[],bootm_headers_t *images)
{
/* No need for those on RISC-V */
if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
return -1;
if (flag & BOOTM_STATE_OS_PREP) {
boot_prep_linux(images);
return 0;
}
if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) {
boot_jump_linux(images, flag);
return 0;
}
boot_prep_linux(images);
boot_jump_linux(images, flag);
return 0;
}
static void boot_jump_linux(bootm_headers_t *images, int flag)
{
kernel = (void (*)(ulong, void *))images->ep;
kernel(gd->arch.boot_hart, images->ft_addr); //images.
}
typedef struct bootm_headers {
/*
* Legacy os image header, if it is a multi component image
剩余13页未读,继续阅读
nick-fei
- 粉丝: 1
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0