Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令

 Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方。

UBoot版本:u-boot-2013.01 


一、U-Boot命令的格式

  即使是内核的启动,也是通过U-Boot命令来实现的。U-Boot中每个命令都是通过 U_BOOT_CMD 宏来定义的,格式如下:

 U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")

各项参数的意义如下:

1) -- name:命令的名字,注意,它不是一个字符串(不要用双引号括起来);

2)-- maxargs:最大的参数个数;

3)-- repeatable:命令是否可以重复,可重复是指运行一个命令后,下次敲回车即可再次运行;

4)-- command:对应的函数指针,类型为(*cmd)(struct cmd_tbl_s *, int, int, char *[]);

5) -- usage:简单的使用说明,这是个字符串;

6)-- help:较详细的使用说明,这是个字符串。


宏U_BOOT_CMD 在include/command.h中定义,如下所示



U_BOOT_CMD 是用一个struct cmd_tbl_s 结构体定义,这个结构体仍是在include/command.h中实现:



      可以看出,对于每个使用U_BOOT_CMD 宏来定义的命令,就是宏 U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)将struct cmd_tbl_s这样的一个命令结构体放到U-BOOT连接脚本 board/xxx/u-boot.lds中定义的".u-boot_cmd"段所在的内存区域,即在".u_boot_list.cmd"段中定义一个 cmd_tbl_t 结构。

连接脚本U-Boot.lds中有如下代码:


  当用户在u-boot的shell中输入命令时,就会在".u_boot_list.cmd"这个内存区域中查找( _u_boot_list_cmd__start - _u_boot_list_cmd__end),当该区域中某一个cmd_tbl_s命令结构体的cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令结构体的cmd_tbl_s.cmd()函数


二、添加自定义命令

自定义命令设为"myubootcmd",不可与u-boot命令重名,

1、添加命令行配置信息

 在u-boot-2013.01/include/configs/fs4412.h(由具体开发板来配置,这里使用fs4412)中添加 #define CONFIG_CMD_MYUBOOT,如下:



2、编写命令行对应的源程序

  u-boot-2013.01/common/目录下,建立相应的命令执行文件cmd_hello.c 

  注意命名的规范,必须是cmd_xxx.c才行里面的内容也是有格式要求的,如函数的格式,必须指定参数的;还有相应结尾部分的U_BOOT_CMD定义部分,使不能缺省的。如果命令不需要跟参数,则把maxargs设置为1即可了。内容如下所示:

[cpp] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. #include <common.h>  
  2. #include <command.h>  
  3.   
  4. #ifdef CONFIG_CMD_HELLO  
  5.   
  6. void helloword (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])   
  7. {    
  8.     printf("hello world by xiaoqiang! \n");  
  9. }  
  10.   
  11. U_BOOT_CMD(hello,1,2,helloword,  
  12.                    "hello command","xiaoqing add hello command!\n");  
  13.   
  14. #endif  


3、修改Makefile

  在common/Makefile中增加一项.



4、编译



5、测试


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调试

python常用的程序调试方法_Python调试的几种方式 python常用的程序调试方法_Python调试的几种方式 Python代码调试的几种方法总结 常用的 Python 调试工具 Python 程序如何高效地调试&#xff1f;

如何抓准问题?

博主推荐延展咨询高级顾问姬忠岩文章“横看成岭侧成峰&#xff0c;远近高低各不同”&#xff0c;同一个问题&#xff0c;角度不同结论就不同&#xff0c;一句古诗把这道理讲得淋漓尽致。无论是日常生活&#xff0c;还是企业管理&#xff0c;我们都会碰到各种各样的问题&#xf…

Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析

uboot启动流程分析如下&#xff1a; 第一阶段&#xff1a; a -- 设置cpu工作模式为SVC模式 b -- 关闭中断&#xff0c;mmu,cache v -- 关看门狗 d -- 初始化内存&#xff0c;串口 e -- 设置栈 f -- 代码自搬移 g -- 清bss h -- 跳c 第二阶段 a -- 初始化外设&#xff0c;进入超…

Linux内核学习四库全书

http://blog.csdn.net/21aspnet/article/details/6585602 关于内核学习我建议不要上来就读内核而是先了解内核的构成和特性&#xff0c;然后通过思考发现疑问这时再去读内核源码。即先了解概貌在读局部细节。而且内核分成好多部分&#xff0c;不要只是按照顺序去读&#xff0c;…

c多线程

C语言多线程&#xff0c;C11多线程完全攻略

Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

Uboot 所用版本 u-boot-2013.01 u-boot-2013.01 中有上千文件&#xff0c;要想了解对于某款开发板&#xff0c;使用哪些文件、哪些文件首先执行、可执行文件占用内存的情况&#xff0c;最好的方法就是阅读它的Makefile。 根据顶层Readme文件的说明&#xff1a; 可以知道如果使…

sqlserver2005仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'SendMealAddress'中为标识列指定显式值。...

ps con.prepareStatement("insert into SendMealAddress values(null,?,?,?,?)"); 表有一列是自增长的标识列&#xff0c;比如第一列是&#xff0c;需要使用这样的格式&#xff1a;ps con.prepareStatement("insert into SendMealAddress(UserId,Concrete…

ipython

使用IPython有哪些好处&#xff1f; IPython介绍 史上最详细、最完全的ipython使用教程&#xff0c;Python使用者必备&#xff01;——ipython系列之二 https://ipython.readthedocs.io/en/stable/ ipython的用法详解 IPython使用学习笔记 IPython Documentation 为什么要使用I…

Exynos4412 所用内存 —— DDR2

一、SDRAM 二、DDR 三、DDR2 四、DDR2的配置

iframe中的历史记录问题汇总及解决方案[转]

在做页面统计的时候遇到了两个问题&#xff1a; 1.包含iframe的页面&#xff0c;在IE下按后退按钮不能刷新主页面。隐藏Iframe的src是统计程序的url&#xff0c;每点一次后退&#xff0c;就会发出一次页面加载时间请求。 2.由js动态创建的img标签会发出两个http请求&#xff0c…

Exynos4412启动过程分析

学习Exynos4412启动流程前&#xff0c;我们先看看三星4412芯片启动框图&#xff1a; 我们从图中可以看到4412内部有64K的ROM和256K SRAM&#xff0c;在ROM中已经固化好了一段代码&#xff0c;当硬件上电后首先运行的就是这段代码&#xff0c;这段代码三星起名为BLO&#xff08;…

高计能计算要实现软着陆

在不久前公布的“2013年中国高性能计算机TOP100排行榜”中&#xff0c;曙光以35%的市场占有率连续5年蝉联市场份额第一。 近日IDC公布的高性能计算市场调查报告(上半年)显示&#xff0c;曙光以0.75亿美元的出货量排名全球第六、亚洲第一&#xff0c;也是世界十强中惟一的中国企…

Exynos4412 所用外存 —— eMMC

Exynos4412所用外存不是原来的Nand Flash 与 Nor Flash&#xff0c;而是eMMC。eMMC是什么呢&#xff1f;和Nand Flash有什么区别呢&#xff1f; 一、eMMC概述 eMMC&#xff08;Embeded MultiMedia Card&#xff09;&#xff1a;它并非是一种全新尺寸的存储卡&#xff0c;而…

Centos 上的chrome 如何启用Java

在chrome上启用Java,虽不常见但是很必要&#xff0c;例如soluvm vn的管理工具&#xff0c;模仿串口控制台访问&#xff0c;关键时候&#xff0c;只能靠它。1、到chrome安装目录下&#xff0c;可以用which命令查看&#xff1a;which google-chrome。我的chrome安装目录是/opt/go…

makefile教程

Makefile教程&#xff08;绝对经典&#xff0c;所有问题看这一篇足够了&#xff09; http://blog.csdn.net/haoel/article/details/2886 makefile很重要 什么是makefile&#xff1f;或许很多Winodws的程序员都不知道这个东西&#xff0c;因为那些Windows的IDE都为你做了这个工…

mini-uboot 启动过程简单分析

单片机有最小系统&#xff0c;所谓最小系统&#xff0c;就是单片机能正常工作所需要的最少外设。对于Uboot来说&#xff0c;同样有个最小系统&#xff0c;因为Uboot最主要的功能就是引导内核。下面我们通过一个简单的Mini-Uboot来分析Uboot的启动加载过程。&#xff08;只是分析…

MySql中的varchar类型

2019独角兽企业重金招聘Python工程师标准>>> MySql中的varchar类型&#xff08;转&#xff09; 今天新开始的项目在做数据库设计&#xff0c;发现自己对MySql的varchar类型还不熟悉&#xff0c;故又上网收集资料整理如下。 1.varchar类型的变化 MySQL 数据库的va…

GDB

用GDB调试程序&#xff08;一&#xff09;

Exynos4412 Uboot 的使用与烧写

Uboot版本&#xff1a;u-boot-2013.01 开发板&#xff1a;Exynos4412 本文主要是熟悉U-boot 的使用以及如何将Uboot 烧入Exynos4412。当然在这之前首先必须保证开发板上已经有了U-boot。如果没有&#xff0c;请先烧入一个已经编译好的Uboot.bin&#xff0c;可以利用JTAG或DNW。…

进入保护模式(三)内存的分页

2019独角兽企业重金招聘Python工程师标准>>> 一、分页 先入为主理解的分页和系统中内存内应的分页 1.弄过数据库数据查找展示&#xff0c;有个数据分页展示的概念&#xff0c;这个的目的是为了速度、和展示效果上的提升 2.内存的分页又是怎么回事哪&#xff1f; …