uboot 新添加一个 ubootargs, 并且 linux 编写模块读取该参数
时间: 2024-01-23 12:40:47 浏览: 92
uboot中加入新命令
在 uboot 中添加 ubootargs 的方法如下:
1. 打开 uboot 源码目录,找到 include/configs 目录下的对应板子的配置文件,比如 imx6ull_evk.h。
2. 在配置文件中添加以下代码:
```
#define CONFIG_EXTRA_ENV_SETTINGS \
"ubootargs=console=ttyS0,115200 earlyprintk\0" \
```
其中 ubootargs 是我们添加的参数,可以根据需要修改参数内容。
3. 在 uboot 启动时加载该参数,可以在启动脚本中添加以下代码:
```
setenv bootargs ${ubootargs}
```
这样,在启动 Linux 内核时就会将 ubootargs 参数传递给内核。
接下来,在 Linux 内核中编写模块读取 ubootargs 参数的方法如下:
1. 在 Linux 内核源码目录下,创建一个新的模块文件,比如 ubootargs.c。
2. 在 ubootargs.c 中添加以下代码:
```
#include <linux/module.h>
static char *ubootargs = NULL;
module_param(ubootargs, charp, 0); // 定义模块参数
static int __init ubootargs_init(void)
{
printk(KERN_INFO "ubootargs: %s\n", ubootargs);
return 0;
}
static void __exit ubootargs_exit(void)
{
printk(KERN_INFO "ubootargs exit\n");
}
module_init(ubootargs_init);
module_exit(ubootargs_exit);
MODULE_LICENSE("GPL");
```
其中,我们使用了 module_param 宏定义了一个模块参数 ubootargs,并在 __init 函数中读取该参数并打印出来。
3. 在 Makefile 中添加以下代码:
```
obj-m += ubootargs.o
```
4. 编译内核模块:
```
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- M=path/to/kernel/module/dir modules
```
5. 将编译生成的 ubootargs.ko 模块文件拷贝到开发板上,并使用 insmod 命令加载模块:
```
insmod ubootargs.ko ubootargs="console=ttyS0,115200 earlyprintk"
```
这样就可以在开发板上打印出 ubootargs 参数的值了。
阅读全文