一、bootcmd设置
bootcmd是一个U-Boot命令,它是用来启动Linux内核的。它不仅可以启动内核,还可以设置环境变量、下载文件等多种功能。bootcmd是一个环境变量,可以通过"setenv"来设置,使用"saveenv"命令保存。在下面的代码示例中,我们通过设置bootcmd来启动U-Boot。
setenv bootcmd 'mmc dev 0; mmc read ${kernel_addr_r} 0x800 0x6800; bootm ${kernel_addr_r}'
saveenv
上述代码设置了一个简单的bootcmd。首先选择了mmc设备,然后使用mmc命令读取内核,最后使用bootm命令启动内核。
除了这个简单的例子外,我们还可以在bootcmd中执行其他的脚本,如下所示:
setenv bootcmd 'run pre_bootcmd; mmc dev 0; mmc read ${kernel_addr_r} 0x800 0x6800; run post_bootcmd; bootm ${kernel_addr_r}'
上述代码执行了三个命令。其中,"run pre_bootcmd"和"run post_bootcmd"是通过"run"命令来执行预定义脚本。这种方式可以让我们在启动内核之前或之后执行一些必要的操作。
二、bootcmd和bootargs的作用
bootcmd和bootargs是两个环境变量,它们分别对应启动内核和内核启动参数。bootcmd是用来启动内核的命令,而bootargs是内核启动的参数。内核启动参数是指内核启动时需要传递给内核的一些参数。这些参数可以告诉内核如何启动以及需要执行哪些操作。
在下面的代码示例中,我们设置了一个bootargs:
setenv bootargs console=${console} root=${root} rootwait ro debug earlyprintk ${extra_params}
在上面的代码中,console、root和extra_params都是在启动时需要传递给内核的参数。这些参数可以根据具体的需要进行设置。
三、bootcmd和bootargs选择
选择适当的bootcmd和bootargs可以让我们更好地启动内核和执行一些必要的操作。
下面是几个与bootcmd相关的例子:
1. 启动内核
在这个例子中,我们简单地启动内核:
setenv bootcmd 'mmc dev 0; mmc read ${kernel_addr_r} 0x800 0x6800; bootm ${kernel_addr_r}'
2. 下载和启动内核
在这个例子中,我们下载内核并启动它:
setenv bootcmd 'tftpboot ${kernel_addr_r} ${image};bootm'
3. 使用NFS启动内核
在这个例子中,我们使用NFS启动内核:
setenv bootcmd 'setenv nfsopts 'nolock'; nfs ${kernel_addr_r} ${server_ip}:${root_path}/${image}; bootm'
下面是几个与bootargs相关的例子:
1. 使用串行控制台
在这个例子中,我们将控制台设置为串行,以便更好地进行调试:
setenv bootargs console=ttyS0,115200
2. 使用网卡启动
在这个例子中,我们使用网络启动内核,同时指定内核的命令行参数:
setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/nfs/rootfs
3. 启用内存调试
在这个例子中,我们启用内存调试,以便更好地检测内存中的错误:
setenv bootargs memtest=1
通过以上代码示例,我们可以看到bootcmd和bootargs的重要性。正确地设置它们可以让我们更好地启动内核并执行必要的操作。