目前 cmdline 参数有多个来源,由 U-Boot 进行拼接、过滤重复数据之后再
传给 kernel。U-Boot 阶段的 cmdline 被保存在 bootargs 环境变量中。U-Boot 最
终是通过修改的 kernel DTB 里的 /chosen/bootargs 实现 cmdline 传递。
cmdline 是 uboot 引导内核启动时传递给内核的,作用是指导内核启动,内
核启动阶段会去解析 cmdline,并根据 cmdline 去指导内核启动。
cmdline 格式是由很多个项目用空格隔开依次排列,每个项目中都是项目名= 项目值。整个 cmdline 会被内核启动时解析,解析成一个一个的项目名=项目值
的字符串。这些字符串又会被再次解析从而影响启动过程。
当内核启动之后,cmdline 命令在启动过程中如下所示:
我们也可以进入文件中,输入以下命令查看 cmdline。
su
cat /proc/cmdline
cmdline 参数说明
storagemedia=emmc
androidboot.storagemedia=emmc
表示存储介质使用的是 EMMC
androidboot.mode=normal
表示安卓系统的启动方式是正常启动方式。除了正常启动方式,还有 charger
(电源充电)启动模式。
androidboot.dtb_idx=0
androidboot.dtbo_idx=0
表示设置的是 dtb 和 dtbo 的索引值,表示在多个设备树中用第几个设备树。
androidboot.verifiedbootstate=orange
官方解释:
On Android, the boot loader must set the androidboot.verifiedbootstate parameter
on the kernel command-line to indicate the boot state. It shall use the following value:
green: If in LOCKED state and the key used for verification was not by the end user. yellow: If in LOCKED state and the key used for verification was setby the end user. orange: If in the UNLOCKED state
androidboot.serialno=67188a9846568f84
表示安卓序列号
androidboot.wificountrycode=CN
表示设置 wifi 的国家码为 CN
androidboot.veritymode=enforcing
表示验证固件的完整性
androidboot.slot_suffix= 表示用于 OTA 升级,选择指定是从 a 启动还是 b 启动
androidboot.baseband=N/A
基带是哪一个,rk 没有这个功能。
console=ttyFIQ0
定义串口
androidboot.hardware=rk30board
表示启动设备的名字
firmware_class.path=/vendor/etc/firmware
指定驱动放置的位置,一些不开源的驱动,如 wifi、bt、gpu 等
init=/init
祖先进程的权限和位置
rootwait ro
用于文件系统不能立即可用的情况,例如 emmc 初始化未完成,这个时候如
果不设置 root_wait 的话,就会 mount rootfs failed,而加上这个参数的话,则可以等
待 driver 加载完成后,在从存储设备中 copy 出 rootfs,再 mount 的话,就不会提
示失败了。ro:加载 rootfs 的属性,只读/读写
loop.max_part=7
用来设定每个 loop 的设备所能支持的分区数目
androidboot.selinux=permissive
有三种模式:
enforcing :强制模式
permissive :宽容模式,这种模式可以用来作为 selinux 的 debug 之用。
disabled: 关闭 selinux
buildvariant=userdebug
earlycon=uart8250,mmio32,0xfe660000
在串口节点未建立之前,指定串口及其配置
androidboot.boot_devices=fe310000.sdhci,fe330000.nandc
表示 emmc 和 nand 的基地址