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

发布者:静静思索最新更新时间:2021-12-15 来源: eefocus关键字:Exynos4412  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即可了。内容如下所示:


#include

#include

 

#ifdef CONFIG_CMD_HELLO

 

void helloword (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) 

{  

printf("hello world by xiaoqiang! n");

}

 

U_BOOT_CMD(hello,1,2,helloword,

           "hello command","xiaoqing add hello command!n");

 

#endif


3、修改Makefile

在common/Makefile中增加一项.

4、编译

5、测试


关键字:Exynos4412  Uboot  移植 引用地址:Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令

上一篇:Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析
下一篇:Exynos4412 Uboot 移植(五)—— Uboot 移植过程

推荐阅读最新更新时间:2024-11-01 15:42

U-Boot-2009-03移植笔记(从Nandflash启动二)
在U-Boot-2009-03移植笔记(从Nandflash启动一)中,我们写好了nandflash的读驱动,并且试图将u-boot本身从nandflash中读到sdram中,最后同时点亮led1和led2,可惜结果并不是我们想要的结果,本文就使用openjtag的调试方法,来诊断问题(不熟悉调试方法的,请参考U-Boot-2009-03移植笔记(调试篇))。 问题的发现 我们反编译u-boot文件,发现我们的程序还是在33f800090调用了nand_init_ll函数,那么我们在0x00000090和0x00000094两个地址设置断点,如图: 发现程序在0x00000090之后就跑飞了,怎么办?我们看看u-boot的
[单片机]
U-Boot-2009-03<font color='red'>移植</font>笔记(从Nandflash启动二)
基于S3C2410处理器目标板的Linux移植
引言 嵌 人式系统就是以应用为中心、以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。ARM嵌人式 芯片是一种高性能、低功耗的RISC芯片。它由英国ARM公司设计,世界上几乎所有的主要半导体生产商都生产基于ARM体系机构的通用芯片,或在其专用芯 片中应用相关ARM技术。在2001年基于ARM内核的处理器占市场份额的75%,成为业界的龙头。 Linux 是免费发行的、快速高效的操作系统 ,Linux的出现在计算机世界引发了一场革命。Linux操作系统以代码开放、功能强大又易于移植成为嵌入式操作新兴力量。嵌人式Linux是按照嵌人 式操作系统的要求设计的一种小型操作系统,由一
[单片机]
利用U-Boot作为系统bootloader实现uClinux向S3C44B0的移植
1 引言 S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于ARM7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系统,其具有支持多任务、内核精简、高效稳定和源代码开放的优点。系统移植的基本过程包括:获取较新版本的linux-2.6.9内核源码,根据目标平台对源码中与硬件平台相关部分进行修改,添加必要的外设驱动程序,对系统进行针对目标平台的交叉编译,生成的内核映像文件的下载调试等。 2 硬件环境介绍 硬件平台以S3C44B0为核心,采用的外部晶振频率为6MHz,内核主频最高可达到66
[单片机]
利用U-Boot作为系统bootloader实现uClinux向S3C44B0的<font color='red'>移植</font>
μC/OS-Ⅱ在ARM系列单片机S3C44B0x上的移植
引 言 目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的
[单片机]
μC/OS-Ⅱ在ARM系列单片机S3C44B0x上的<font color='red'>移植</font>
基于3c2410的linux2.6.22移植(6)
2. LCD驱动移植:继续在mach-smdk2410.c中添加如下内容: . #include asm/arch/fb.h #include asm/arch/regs-gpio.h #include asm/arch/regs-lcd.h . . static struct s3c2410fb_mach_info smdk2410_lcdcfg __initdata={ .type=S3C2410_LCDCON1_TFT, .fixed_syncs= 0, .regs={ .lcdcon1= S3C2410_LCDCON1_TF
[单片机]
stm32 移植uip
1 stm32 定义常量不要code 关键字 // 定义全1 地址常量 static const uip_ipaddr_t code all_ones_addr = #if UIP_CONF_IPV6 {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; #else /* UIP_CONF_IPV6 */ {0xffff,0xffff}; #endif /* UIP_CONF_IPV6 */ //定义全0地址常量 static const uip_ipaddr_t code all_zeroes_addr = #if UIP_CONF_IP
[单片机]
uboot的简单易懂的启动流程
static ulong get_PLLCLK(int pllreg) { S3C24X0_CLOCK_POWER* const clk_power = S3C24X0_GetBase_CLOCK_POWER(); ulong r, m, p, s; if (pllreg == MPLL) r = clk_power- MPLLCON; else if (pllreg == UPLL) r = clk_power- UPLLCON; else hang(); m = ((r & 0xFF000) 12) + 8; p = ((r & 0x003F0) 4) + 2; s =
[单片机]
<font color='red'>uboot</font>的简单易懂的启动流程
IAR环境下ucosii在STM32上的移植
Ucosii移植到STM32上 1.使用的开发环境是IAR 5.4 STM32芯片为STM32F103ZET6 使用ST官方提供的标准固件库,建立工程, 我下载的苦艰苦的版本为STM32F10x_StdPeriph_Lib_V3.5.0,里面的文件分布为: 其中,Libraries文件夹里面放的是标准库文件,Project文件夹里面放的是STM32的各个外设的使用范例和一个工程模板,Utilities文件夹里面放的是ST公司的评估板例子,剩下的文件就是教我们怎样使用标准库,而我们主要使用的就是Libraries和Project里面的文件。 1.1首先新建stm32这个文件夹,在里面再新建3个文件夹include,proj
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved