Linux使用单核心启动的方法
日前在解决问题的时候,因为要排除某些因素,所以想要减少Linux系统中使用的CPU的核心,之前在LS1028平台,可以通过TEST_SEL_B和cfg_svr[0]直接更改其变成其他的型号,参见以下内容:
比如可以通过将cfg_svr[0]置低以变成LS1018,以实现将双核变成单核的效果。
同样在LS1046平台,也有以下的内容:
可以看到也可以通过将TEST_SEL_B引脚接地,来把LS1046A变成LS1026A,以实现将四核变成双核的效果。
但是我们如果想要只使用一个CPU核心应该如何操作呢?
后来在在网上看到了以下的文章:
AMD64 和 Intel 64 系统的
kdump
中的多个 CPU 支持在 AMD64 和 Intel 64 系统中,
kdump
内核崩溃转储机制现在可以引导,并启用了多个 CPU。这解决了在创建内核崩溃转储时因为高输入和输出而出现问题,在使用 maxcpus=1 或 nr_cpus=1 内核选项时,Linux 可能无法为设备分配中断。此功能以前作为技术预览提供,现在被完全支持。要在崩溃内核中启用多个 CPU,请在内核命令行中提供 nr_cpus= \X**** 选项(其中 X 是处理器数)
上面说明了可以在uboot的环境变量的boorargs中可以通过maxcpus=1 或 nr_cpus=1来设置使用的CPU个数。
那这两个有什么区别呢?下面我们分别使用这两个选项进行测试:
首先是使用 nr_cpus=1,我们使用八核的RK3588来进行测试,在uboot命令行输入以下指令
setenv bootargs "storagemedia=emmc nr_cpus=1"
saveenv
reset
然后重启进入到文件系统,可以使用lscpu查看使用的CPU情况,结果如下:
可以看到以下内容:
CPU(s): 1
On-line CPU(s) list: 0
说明仅使用了一个CPU,且仅有一个CPU核心可以被使用,此时使用dmesg去查找CPU相关的信息,结果如下:
然后是使用 maxcpus=1,在uboot命令行输入以下指令
setenv bootargs "storagemedia=emmc maxcpus=1"
saveenv
reset
然后重启进入到文件系统,可以使用lscpu查看使用的CPU情况,结果如下:
可以看到以下内容:
CPU(s): 8
On-line CPU(s) list: 0
Off-line CPU(s) list: 1-7
说明仅使用了一个CPU,且有八个CPU核心可以被使用,一到七号CPU核心设为了Off-line状态,此时使用dmesg去查找CPU相关的信息,结果如下: