两种方法:
1. 内核配置中Default kernel command string
2. uboot中bootargs变量
规则:
1. 如果uboot的bootargs设置了,kernel的Boot
options中的Default kernel command string设置与否,都不启作用,即bootargs覆盖掉设置的Default
kernel command string,打印的信息也是bootargs传过来的command string。
2. 如果uboot的bootargs未设置的话,kernel就以Boot
options中的Default kernel command string的设置进行启动。
总之:
不管是从NAND还是NOR起动,uboot是用来引导linux的,如果uboot的bootargs设置了的话,uboot在引导Linux时会用bootargs替换掉linux的command
string。CONFIG_CMDLINE实在bootloader无法给内核传递参数的情况下才有用,一般是用不到内核自己配的CONFIG_CMDLINE的 。
强制使用内核配置的Default kernel command string设置:
cmdline在不同的平台上有不同的改法,有的单独存在于一个分区中,有的使用的是uboot,需要在启动过程中中断启动并进行手动修改,也有的平台上使用的是uboot的变种读取配置文件获取cmdline,更甚至还有一些平台在sdcard中跑系统和在emmc中跑系统的修改cmdline的方法都不一样,或许厂家还没有考虑到用户有改cmdline的需求。
一些方法是不可用的:
1. 需要改uboot源码才可以改cmdline的不可用;
2. 需要手动中断uboot启动并手动改cmdline的不可用;
可用的方法:
1. 将cmdline放到Android固件中,烧写Android固件的同时cmdline也已经设置好,不需要再操作,这样就可以量产设备。
1. 强制内核使用自配置的cmdline
现在需要因地制宜,内核强制使用CONFIG_CMDLINE
不使用bootloader传递过来的cmdline,具体配置如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
将Kernel command line type (***)
配置成Always use the default kernel command string
。这样内核就会使用自己的命令行参数。
2. 设置需要的CMDLINE
比如下图我的CMDLINE中添加了androidboot.selinux=permissive
另:
可能使用Extend bootloader kernel arguments
这个选项会更友善一些,下次有时间再作测试。