Linux内核强制使用自配置的cmdline

开发过程中遇到一些问题,需要改cmdline。cmdline在不同的平台上有不同的改法,有的单独存在于一个分区中,有的使用的是uboot,需要在启动过程中中断启动并进行手动修改,也有的平台上使用的是uboot的变种读取配置文件获取cmdline,更甚至还有一些平台在sdcard中跑系统和在emmc中跑系统的修改cmdline的方法都不一样,或许厂家还没有考虑到用户有改cmdline的需求。
一些方法是不可用的:
1. 需要改uboot源码才可以改cmdline的不可用;
2. 需要手动中断uboot启动并手动改cmdline的不可用;

可用的方法:
1. 将cmdline放到Android固件中,烧写Android固件的同时cmdline也已经设置好,不需要再操作,这样就可以量产设备。


综上所述,如果厂家没有将cmdline放到一个单独的存储空间中且在烧写固件时就把cmdline设置好的话,目标就锁定在了kernel上,内核是第一个拿到cmdline的,也只有它主要在用,内核的配置项中有一个配置内核启动参数的选项CONFIG_CMDLINE,但是它只是一个备胎,一般情况下还是主要使用bootloader传递过来的cmdline。
1. 强制内核使用自配置的cmdline
现在需要因地制宜,内核强制使用CONFIG_CMDLINE不使用bootloader传递过来的cmdline,具体配置如下:

make menuconfig
->  Boot options
 -> Kernel command line type (***)
  ( ) Use bootloader kernel arguments if available
  ( ) Extend bootloader kernel arguments
  (X) Always use the default kernel command string

Kernel command line type (***)配置成Always use the default kernel command string。这样内核就会使用自己的命令行参数。
这里写图片描述
2. 设置需要的CMDLINE
比如下图我的CMDLINE中添加了androidboot.selinux=permissive
这里写图片描述

另:
可能使用Extend bootloader kernel arguments这个选项会更友善一些,下次有时间再作测试,这里就不作讨论了。

### Linux Kernel Panic 原因分析 当操作系统遇到无法恢复的严重错误时,Linux 内核会触发 `Kernel Panic` 错误。这通常意味着内核检测到了可能导致数据丢失或其他不可逆损害的情况[^1]。 常见的引发因素包括但不限于: - **硬件故障**:内存条损坏、硬盘坏道等问题都可能引起此类异常。 - **驱动程序冲突**:新安装或更新后的设备驱动与现有环境存在兼容性问题。 - **文件系统损坏**:根分区或其他重要卷上的元数据受损也会造成崩溃。 - **配置不当**:SELinux策略设置过严或者其他安全模块限制了必要的操作权限。 对于特定情况下的 "not syncing" 提示,则表明日志同步机制未能正常工作,可能是由于底层存储子系统的致命缺陷所致[^2]。 ### 解决方案概述 针对上述提到的各种可能性,有几种通用的方法可以尝试来解决问题并防止其再次发生: #### 方法一:临时调整启动参数 通过GRUB引导加载器临时禁用某些强制执行的安全特性,允许机器能够成功启动至图形界面或命令行模式下进一步排查问题所在。具体做法是在 GRUB 菜单中找到对应内核版本那一项,追加 `enforcing=0` 参数后再继续启动流程。 这种方法虽然能快速绕过当前障碍恢复正常运行状态,但由于只是暂时规避而非根本修复,因此建议尽快采取更持久有效的措施。 #### 方法二:永久修改启动选项 为了使更改长期生效而不必每次都手动干预,可以在 `/etc/default/grub` 文件里添加相同的参数定义,之后重新生成 GRUB 配置文件以及刷新 MBR 记录以便改动立即起效。以下是具体的实现方式: ```bash sudo vi /etc/default/grub # 找到 GRUB_CMDLINE_LINUX 这一行,在双引号内部加入 enforcing=0 sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg # 对于 UEFI 系统 sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 对于 BIOS 系统 ``` 完成这些步骤后记得保存退出编辑器,并重启计算机验证效果如何。 另外还需要注意的是,如果是因为 SELinux 导致的问题,除了放宽控制级别外还可以考虑完全关闭该服务(仅限测试环境中),即把 `selinux=enforcing` 改成 `selinux=permissive` 或者直接设为 `disabled` 来观察现象变化。 最后提醒一点,以上所有操作均需谨慎行事以免带来不必要的风险;若有不确定之处最好先查阅官方文档获取最权威指导信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值