希望朋友们多多指点,好的技术或心得一起分享:

uboot向kernel传参机制以及kernel如何解析cmdline参数大家可以参考其他前辈的博文,这方面的讲解十分详尽。

在这里我总结以下自己在uboot自定义一个参数并从kernel中取得的方法:

一.uboot添加自定义参数number

在uboot命令行下,我通过setenv bootargs以及saveenv命令来在bootargs参数中添加自己的一个参数,例如:

=>setenv bootargs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx number=${num}

=>setenv num 0

=>saveenv

其中bootargs前面部分省略,number为在原bootargs后添加的参数,它会去取num的值,因此以后只要修改num的值即可(这里先设置为0)

二.kernel读取uboot传入的参数number:

在想要取得uboot传入参数的文件中进行如下操作:

1.添加头文件:

#include

2.添加如下内容:

static unsigned int number;

static int __init number_setup (char *num)

{

number = *num - '0';

}

__setup("number=", number_setup);

宏__setup("number=", number_setup)会在bootargs中取得"number="后的值作为函数number_setup的参数num,因此只要在number_setup函数中用全局变量number接收该值即可(此处我将传入的值作为数字处理)。

至此,我们就能在kernel中读取到uboot传入的自定义参数值

****************************************************************************************************************

另:作为用户来说,不可能每次启动都先在uboot命令行下通过setenv,saveenv来修改传入kernel的环境变量,因此uboot提供了fw_printenv工具来让用户在文件系统下来查看和修改环境变量,具体步骤如下:

1.编译fw_printenv工具:

在uboot源码目录下,执行:

make env ARCH=xxx CROSS_COMPILE=yyy

其中xxx和yyy根据自己的交叉编译环境来配置

接着会在tools/env下生成fw_printenv的可执行文件,将其拷贝到文件系统中的/usr/bin(此路径可以自己指定)目录下,再创建fw_printenv的软链接(直接cp也可以):

ln -s /usr/bin/fw_printenv /usr/bin/fw_setenv

2.配置fw_env.config文件

根据mtd分区、UBOOT环境变量的位置、大小等内容修改uboot源码目录的tools/env下的fw_env.config文件,具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件,我的修改内容如下作为参考(需根据实际情况来修改):

# MTD device name       Device offset   Env. size       Flash sector size

/dev/mtd0               0xc0000         0x2000          0x10000

其中Device offset,Env size和Flash sector size应该分别对应于uboot源码目录中include/configs/xxxx.h相关文件中的

CONFIG_ENV_OFFSET,CONFIG_ENV_SIZE和CONFIG_ENV_SECT_SIZE三个宏定义

修改完成后,将fw_env.config文件拷贝到文件系统的/etc目录下。

3.fw_printenv的使用

在文件系统中输入fw_printenv命令来查看环境变量,输入fw_setenv xxx yyy 来修改环境变量(xxx为变量名,yyy为变零值),方法类似setenv,修改后会自动保存,详细用法通过fw_printenv --help命令来查看

uboot修改linux源码中参数,将自定义参数从uboot传入kernel的并读取的方法【转】相关推荐

  1. Linux源码中的mktime算法解析

    Linux源码中的mktime算法解析 我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的. 那么,要把它转化为系统便于处理的ti ...

  2. linux源码中ar8031驱动,AM335xd + KSZ8863RLL Linux网络底层驱动问题

    开发平台AM335XD, 添加一款网络接口芯片 swith PHYs ksz8863RLL,百兆以太网模式, 接口为RMii, 原来开发版Linux内核配置的是一个千兆以太网PHY芯片 ar8031, ...

  3. linux源码中,.org 0x2000,ENTRY(pg1)表示的是什么意思?org是什么意思,ENTRY是什么意思啊?

    .org 0x2000表示内容填充至地址0x2000.如:你的文件有0x1000字节,你指定链接器ld将该文件的内容加载到内存地址0x0000,这样文件最末就在地址0x0FFF上,你承认吧.如果在文件 ...

  4. Linux内核源码中使用宏定义的若干技巧

    在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...

  5. 关于在Ubuntu中修改Android源码的一些总结

    关于在ubuntu中修改Android源码的一些总结 1.关于配置VMware,网上有一大堆的方法,这里就不详述了,我现在用的源码是4.0.3的.要想改源码,你需要以下基本的东西: 推荐配置: OS ...

  6. Rust for Linux 源码导读 | Ref 引用计数容器 原创

    引子 2022 年,我们很可能会看到 Linux 内核中的实验性 Rust 编程语言支持成为主流.2021.12.6 早上发出了更新的补丁,介绍了在内核中处理 Rust 的初始支持和基础设施. 这次更 ...

  7. ctags 生成简明易用 linux 源码 tags

    问题所在 一般使用ctags 就是用ctags -R生成tags.不过这样看源码时会有两个问题: 假如同一个函数在不同的处理器架构中都有实现,那么跳转时,会出现很多你不关心的架构的函数原型.比如你关注 ...

  8. 关于在ubuntu中修改Android源码的一些细节

    1.关于配置VMware,网上有一大堆的方法,这里就不详述了,我现在用的源码是4.0.3的.要想改源码,你需要以下基本的东西: 推荐配置: OS Ubuntu 11.04 64bit Gcc 4.5. ...

  9. 修改marathon源码后,如何编译,部署到集群中?

    首先,marathon源码是由scala语言编写,由sbt进行项目构建的:与spark不同,spark是由maven进行项目构建: 方案一:使用intellij idea导入marathon源码[目前 ...

最新文章

  1. [Freescale]E9学习笔记-LTIB安装配置
  2. 阿里云DDoS高防 - 访问与攻击日志实时分析(二)
  3. Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
  4. shiro 的session持久化
  5. MySql链接字符串 各种程序连接大合集(包括asp.net,c#,等等)
  6. OpenCV3实现人脸识别(三)——训练与识别自己的人脸数据
  7. kubesphere报错收集
  8. 详解ASP.NET页面的aspx扩展
  9. 555定时器回差电压计算公式_555时基电路引脚解析
  10. 2017.9.5 postgresql加密函数的使用
  11. puppet-dashboard安装及用apache和nginx进行管理
  12. 手动抛出异常_(七)异常处理
  13. ant vue 树形菜单横向显示_快速实现一个简单可复用可扩展的Vue树组件
  14. Symbian 5800 重力开发的一些数据
  15. 关于盒子模型的应用(制作三角形)
  16. 基于H5的移动端APP开发框架
  17. Quartus II三种方式实现D触发器
  18. while循环的使用
  19. 输入一个四位数字x,分别求出x的个位数字、十位数字、百位数字和千位数字的值 ,并求个位、十位、百位、千位的和 -C语言
  20. Java接入微信支付超级详细教程——从入门到精通

热门文章

  1. ASP.NET MVC中使用FluentValidation验证实体
  2. dbgrid的最小高度设置。否则出现滚动条。
  3. Dynamips 简介
  4. Unix编程哲学和软件设计方法
  5. VS2015 打包winform 安装程序
  6. T-SQL查询进阶--变量
  7. LINQ体验(6)——LINQ语句之Join和Order By
  8. Java处理split分割【for循环】
  9. 使用Reactor进行反应式编程最全教程
  10. php中 elseif和else if 的区别