本文转载自:http://blog.csdn.net/qq_29729577/article/details/50580727

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

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 <linux/init.h>

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传入kernel的并读取的方法【转】的更多相关文章

  1. 关于uboot和kernel的一些理解

    经过多次的修改和实验,终于能够在mini2440开发板上进行各种uboot和kernel的挂载实验了,在此期间学习到了很多知识,也理解了一些知识1->分区uboot和kernel的分区表要一致u ...

  2. C# .net framework .net core 3.1 请求参数校验, DataAnnotations, 自定义参数校验

    前言 在实际应用场景中我们常常要对接口的入参进行校验, 例如分页大小是否正确, 必填参数是否已经填写等等. 最简单的实现方式如下图, 这种在实际开发中代码过于冗余, 而且不灵活. 今天介绍一种统一参数 ...

  3. 引用 U-boot给kernel传参数和kernel读取参数—struct tag

    引用 清风徐徐 的 U-boot给kernel传参数和kernel读取参数—struct tag U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等.而Linux ...

  4. Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性) 前言:由于前段时间忙于写接口,在接口中需要做很多的参数校验,本着简洁.高效的原则,便写了这个小工具供自己使用(内容 ...

  5. 【vue】@click绑定的函数,如何同时传入事件对象和自定义参数

    知识很久不用的话,果然是容易忘的... 记记笔记,希望能加深点印象吧. [仅仅传入事件对象] html: <div id="app"> <button @clic ...

  6. Scrapy命令行调用传入自定义参数

    在做爬虫服务化时,有这样一个需求:接口用命令行启动爬虫,但是数据入库时要记录此次任务的task_id. 简单说就是,Scrapy命令行启动时要动态传参进去. 解决方案: 在spider中定义一个构造函 ...

  7. u-boot、kernel和filesystem 执行过程分析

    标题: Uboot -kerne-root 启动流程 内容: ※uboot启动流程 ※Kernel启动流程 ※Root启动流程 ※构建根文件系统 /************************** ...

  8. 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

    Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash c ...

  9. log4net:保存自定义参数到数据库

    log4net:保存日志到数据库 自定义参数 新建一个类,继承于PatternLayoutConverter public class CustomerPatternConverter : Patte ...

随机推荐

  1. TF-IDF学习笔记

    计算文本的权重向量,有个很有效的权重方案:TF-IDF权重策略.TF-IDF含义是词频逆文档频率,指的是,如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或短语具有很好的 ...

  2. Javascript中的e.keyCode大全

    keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear keycode 13 = Enter keycode 16 ...

  3. Caused by: java.io.FileNotFoundException: rmi_keystore.jks (没有那个文件或目录)

    解决方法:修改jmeter.properites: server.rmi.ssl.disable=true,关闭ssl功能 参考: https://blog.csdn.net/nielinqi520/ ...

  4. SilverLight:布局(3)StackPanel 对象

    ylbtech-SilverLight-Layout: 布局(3)StackPanel 对象 A, Nesting Layout Containers(内嵌布局容器) B, StackPanel(队列 ...

  5. iOS开发 ----- 加载动画之牛顿摆的实现

    牛顿摆动画 自己看动画有一段时间了,但是还是不是很能理解其中的一些属性方法之类的东西,琢磨了一下午写了一个牛顿摆的动画,这里记录一下,一遍以后查看先上图 先说下思路 说下牛顿摆的大致运动过程 根据牛顿 ...

  6. POJ 2249-Binomial Showdown(排列组合计数)

    Binomial Showdown Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18457   Accepted: 563 ...

  7. LNMPA遇到504 Gateway time-out错误的解决方法

    Nginx的特点是处理静态很给力,Apache的特点是处理动态很稳定,两者结合起来便是LNMPA,nginx处理前端,apache处理后端,这样处理静态会很快,处理动态会很稳定. 当我以为安装完成以后 ...

  8. 怎样在C语言里实现“面向对象编程”

    有人觉得面向对象是C++/Java这样的高级语言的专利,实际不是这样.面向对象作为一种设计方法.是不限制语言的.仅仅能说,用C++/Java这样的语法来实现面向对象会更easy.更自然一些. 在本节中 ...

  9. Linux问题,磁盘分区打不开了

    Metadata kept in Windows cache, refused to mount. chkdsk /f http://www.bubuko.com/infodetail-1184937 ...

  10. # kubernetes调度之nodeName与NodeSelector

    系列目录 Kubernetes的调度有简单,有复杂,指定NodeName和使用NodeSelector调度是最简单的,可以将Pod调度到期望的节点上. 本文主要介绍kubernetes调度框架中的No ...