uboot中增加命令

在学习uboot的过程中会经常烧录程序,每次都要敲一些下载指令。这样是不是很麻烦,有什么办法能快速的烧写呢。很简单,将需要敲击的指令编译到uboot中,以环境变量的形式存在。但是环境变量很好加,如何运行环境变量呢。这就需要自己加入run指令了。本文旨在简化uboot、linux内核及文件系统的烧录过程。

本文基于海思的Hi3531的uboot修改,首先在uboot目录下的include/configs/godnet.h中修改加入如下代码,增加烧写的环境变量。

[objc]  view plain  copy
  1. #define CONFIG_BOOTDELAY    1  
  2. #define CONFIG_BOOTARGS "mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)"  
  3. #define CONFIG_NETMASK  255.255.255.0       /* talk on MY local net */  
  4. #define CONFIG_IPADDR   192.168.0.251        /* static IP I currently own */  
  5. #define CONFIG_SERVERIP 192.168.0.27     /* current IP of tftp server ip */  
  6. #define CONFIG_ETHADDR  00:00:23:34:45:66  
  7. #define CONFIG_BOOTFILE "uImage"        /* file to load */  
  8. #define CONFIG_BAUDRATE         115200  
  9. #define CONFIG_UBOOT_BURN "mw.b 82000000 ff 100000;tftp 0x82000000 u-boot-ok.bin;sf probe 0;sf erase 0 100000;sf write 82000000 0 100000"  
  10. #define CONFIG_KERNEL_BURN "mw.b 82000000 ff 400000;tftp 82000000 uImage;sf probe 0;sf erase 100000 400000;sf write 82000000 100000 400000"  
  11. #define CONFIG_ROOT_BURN "mw.b 82000000 ff b00000; tftp 0x82000000 rootfs.jffs2;sf probe 0;sf erase 500000 b00000;sf write 82000000 500000 b00000"  

其中,红色部分为加入的指令

CONFIG_UBOOT_BURN为烧写uboot的指令,CONFIG_KERNEL_BURN为烧写内核的指令,CONFIG_ROOT_BURN为烧写根文件系统的指令,具体指令内容不在详述;


还需要在环境变量的文件/common/env_common.c的default_environment数组中加入环境变量的值。具体代码如下:

[objc]  view plain  copy
  1. uchar default_environment[] = {  
  2. #ifdef  CONFIG_BOOTARGS  
  3.     "bootargs=" CONFIG_BOOTARGS         "\0"  
  4. #endif  
  5. #ifdef  CONFIG_BOOTCOMMAND  
  6.     "bootcmd="  CONFIG_BOOTCOMMAND      "\0"  
  7. #endif  
  8. #ifdef  CONFIG_RAMBOOTCOMMAND  
  9.     "ramboot="  CONFIG_RAMBOOTCOMMAND       "\0"  
  10. #endif  
  11. #ifdef  CONFIG_NFSBOOTCOMMAND  
  12.     "nfsboot="  CONFIG_NFSBOOTCOMMAND       "\0"  
  13. #endif  
  14. #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)  
  15.     "bootdelay="    MK_STR(CONFIG_BOOTDELAY)    "\0"  
  16. #endif  
  17. #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)  
  18.     "baudrate=" MK_STR(CONFIG_BAUDRATE)     "\0"  
  19. #endif  
  20. #ifdef  CONFIG_LOADS_ECHO  
  21.     "loads_echo="   MK_STR(CONFIG_LOADS_ECHO)   "\0"  
  22. #endif  
  23. #ifdef  CONFIG_MDIO_INTF  
  24.     "mdio_intf="    CONFIG_MDIO_INTF            "\0"  
  25. #endif  
  26. #ifdef  CONFIG_ETHADDR  
  27.     "ethaddr="  MK_STR(CONFIG_ETHADDR)      "\0"  
  28. #endif  
  29. #ifdef  CONFIG_ETH1ADDR  
  30.     "eth1addr=" MK_STR(CONFIG_ETH1ADDR)     "\0"  
  31. #endif  
  32. #ifdef  CONFIG_ETH2ADDR  
  33.     "eth2addr=" MK_STR(CONFIG_ETH2ADDR)     "\0"  
  34. #endif  
  35. #ifdef  CONFIG_ETH3ADDR  
  36.     "eth3addr=" MK_STR(CONFIG_ETH3ADDR)     "\0"  
  37. #endif  
  38. #ifdef  CONFIG_ETH4ADDR  
  39.     "eth4addr=" MK_STR(CONFIG_ETH4ADDR)     "\0"  
  40. #endif  
  41. #ifdef  CONFIG_ETH5ADDR  
  42.     "eth5addr=" MK_STR(CONFIG_ETH5ADDR)     "\0"  
  43. #endif  
  44. #ifdef  CONFIG_IPADDR  
  45.     "ipaddr="   MK_STR(CONFIG_IPADDR)       "\0"  
  46. #endif  
  47. #ifdef  CONFIG_SERVERIP  
  48.     "serverip=" MK_STR(CONFIG_SERVERIP)     "\0"  
  49. #endif  
  50. #ifdef  CONFIG_SYS_AUTOLOAD  
  51.     "autoload=" CONFIG_SYS_AUTOLOAD         "\0"  
  52. #endif  
  53. #ifdef  CONFIG_PREBOOT  
  54.     "preboot="  CONFIG_PREBOOT          "\0"  
  55. #endif  
  56. #ifdef  CONFIG_ROOTPATH  
  57.     "rootpath=" MK_STR(CONFIG_ROOTPATH)     "\0"  
  58. #endif  
  59. #ifdef  CONFIG_GATEWAYIP  
  60.     "gatewayip="    MK_STR(CONFIG_GATEWAYIP)    "\0"  
  61. #endif  
  62. #ifdef  CONFIG_NETMASK  
  63.     "netmask="  MK_STR(CONFIG_NETMASK)      "\0"  
  64. #endif  
  65. #ifdef  CONFIG_HOSTNAME  
  66.     "hostname=" MK_STR(CONFIG_HOSTNAME)     "\0"  
  67. #endif  
  68. #ifdef  CONFIG_BOOTFILE  
  69.     "bootfile=" MK_STR(CONFIG_BOOTFILE)     "\0"  
  70. #endif  
  71. #ifdef  CONFIG_LOADADDR  
  72.     "loadaddr=" MK_STR(CONFIG_LOADADDR)     "\0"  
  73. #endif  
  74. #ifdef  CONFIG_CLOCKS_IN_MHZ  
  75.     "clocks_in_mhz=1\0"  
  76. #endif  
  77. #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)  
  78.     "pcidelay=" MK_STR(CONFIG_PCI_BOOTDELAY)    "\0"  
  79. #endif  
  80. #ifdef CONFIG_UBOOT_BURN  
  81.     "uboot_burn="   CONFIG_UBOOT_BURN           "\0"  
  82. #endif  
  83. #ifdef CONFIG_KERNEL_BURN  
  84.     "kernel_burn="  CONFIG_KERNEL_BURN          "\0"  
  85. #endif  
  86. #ifdef CONFIG_ROOT_BURN  
  87.     "root_burn="    CONFIG_ROOT_BURN            "\0"  
  88. #endif  
  89. #ifdef  CONFIG_EXTRA_ENV_SETTINGS  
  90.     CONFIG_EXTRA_ENV_SETTINGS  
  91. #endif  
  92.     "\0"  
  93. };  
上述红色部分为加入的环境变量,其中uboot_burn,kernel_burn,root_burn为环境变量的名称。此后在uboot指令输入界面输入printenv可以看到变量值。

至此,环境变量修改完毕。下面如何在uboot中运行环境变量呢,其实只要能让uboot_burn变量中的内容执行即可。因此需要有一条指令可以运行这个环境变量。此时就需要cmd_run.c参与了。

在学习uboot时,我们知道在/common路径下面有很多以cmd_开头的文件,这些文件即使在uboot中可以运行的指令。但是,需要在配置文件和Makefile中添加支持。

首先我们把cmd_run.c文件创建了,代码如下:

[objc]  view plain  copy
  1. /*  
  2. * (C) Copyright 2000-2003  
  3. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.  
  4.  
  5. * See file CREDITS for list of people who contributed to this  
  6. * project.  
  7.  
  8. * This program is free software; you can redistribute it and/or  
  9. * modify it under the terms of the GNU General Public License as  
  10. * published by the Free Software Foundation; either version 2 of  
  11. * the License, or (at your option) any later version.  
  12.  
  13. * This program is distributed in the hope that it will be useful,  
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of  
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
  16. * GNU General Public License for more details.  
  17.  
  18. * You should have received a copy of the GNU General Public License  
  19. * along with this program; if not, write to the Free Software  
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,  
  21. * MA 02111-1307 USA  
  22. */   
  23.   
  24. #include <common.h>  
  25. #include <command.h>  
  26.   
  27. int do_run (cmd_tbl_t * cmdtp, int flag, int argc, charchar *argv[])  
  28. {  
  29.     int i;  
  30.   
  31.     if (argc < 2) {  
  32.         cmd_usage(cmdtp);  
  33.         return 1;  
  34.     }  
  35.   
  36.     for (i=1; i<argc; ++i) {  
  37.         charchar *arg;  
  38.   
  39.         if ((arg = getenv (argv[i])) == NULL) {  
  40.             printf ("## Error: \"%s\" not defined\n", argv[i]);  
  41.             return 1;  
  42.         }  
  43. #ifndef CONFIG_SYS_HUSH_PARSER  
  44.         if (run_command (arg, flag) == -1)  
  45.             return 1;  
  46. #else  
  47.         if (parse_string_outer(arg,  
  48.             FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0)  
  49.             return 1;  
  50. #endif  
  51.     }  
  52.     return 0;  
  53. }  
  54.   
  55. U_BOOT_CMD(  
  56.     run,    CONFIG_SYS_MAXARGS, 1,  do_run,  
  57.     "run commands in an environment variable",  
  58.     "var [...]\n"  
  59.     "    - run the commands in the environment variable(s) 'var'"  
  60. );  
该C文件创建完,放入到common路径下,下面需要修改common路径下的Makefile,在文件中加入COBJS-y += cmd_run.o即可。这是将cmd_run.c加入编译选项中。在如下位置添加红色部分。

[objc]  view plain  copy
  1. COBJS-$(CONFIG_CMD_I2C) += cmd_i2c.o  
  2. COBJS-$(CONFIG_CMD_IDE) += cmd_ide.o  
  3. COBJS-$(CONFIG_CMD_IMMAP) += cmd_immap.o  
  4. COBJS-$(CONFIG_CMD_IRQ) += cmd_irq.o  
  5. COBJS-$(CONFIG_CMD_ITEST) += cmd_itest.o  
  6. COBJS-$(CONFIG_CMD_JFFS2) += cmd_jffs2.o  
  7. COBJS-$(CONFIG_CMD_CRAMFS) += cmd_cramfs.o  
  8. COBJS-$(CONFIG_CMD_LICENSE) += cmd_license.o  
  9. COBJS-y += cmd_load.o  
[objc]  view plain  copy
  1. COBJS-y += cmd_run.o  

至此run运行环境变量的方法已经添加完毕,按照正常的流程编译uboot,然后按照正常流程烧写。烧录成功后,在uboot运行指令界面输入run会出现如下界面

[objc]  view plain  copy
  1. U-Boot 2010.06 (Oct 26 2015 - 10:15:14)  
  2.   
  3. DRAM:  256 MiB  
  4. NAND:  Special Nand id table Version 1.35  
  5. Nand ID0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
  6. No NAND device found!!!  
  7. 0 MiB  
  8. Check spi flash controller v300. found  
  9. Spi(cs1) ID0xEF 0x40 0x18 0x00 0x00 0x00  
  10. Spi(cs1): Block:64KB Chip:16MB Name:"W25Q128BV"  
  11. In:    serial  
  12. Out:   serial  
  13. Err:   serial  
  14. judge ddr init  
  15. user init finish.  
  16. Hit any key to stop autoboot:  0   
  17. hisilicon # run  
  18. run - run commands in an environment variable  
  19.   
  20. hisilicon #   

现在可以去运行刚刚添加的环境变量了,输入:“run uboot_burn”试试吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 u-boot-1.1.6 之 cpu/arm920t/start.s分析 ........................................................................................... 2 u-boot .lds连接脚本文件的分析 ...................................................................................................12 分享一篇我总结的 uboot 学习笔记(转) .....................................................................................15 U-BOOT内存布局及启动过程浅析 ...................................................................................................22 u-boot 命令实现 .......................................................................................................................... 25 U-BOOT环境变量实现 ........................................................................................................................28 1.相关文件 ....................................................................................................................................28 2.数据结构 ....................................................................................................................................28 3.ENV 的初始化...........................................................................................................................30 3.1env_init ............................................................................................................................30 3.2 env_relocate ...................................................................................................................30 3.3*env_relocate_spec ........................................................................................................31 4. ENV 的保存 ..............................................................................................................................31 U-Boot 环境变量 ..........................................................................................................................32 u-boot 代码链接的问题 ......................................................................................................................35 ldr 和 adr 在使用标号表达式作为操作数的区别 ............................................................................40 start_armboot 浅析 ..............................................................................................................................42 1.全局数据结构的初始化 ..........................................................................................................42 2.调用通用初始化函数...............................................................................................................43 3.初始化具体设备 .......................................................................................................................44 4.初始化环境变量 .......................................................................................................................44 5.进入主循环 ...............................................................................................................................44 u-boot 编译过程 ...................................................................................................................................44 mkconfig文件的分析 .......................................................................................................................... 47 从 NAND闪存启动 U-BOOT的设计 ..............................................................................................50 引言 ...............................................................................................................................................50 NAND闪存工作原理 ................................................................................................................... 51 从 NAND闪存启动 U-BOOT的设计思路.................................................................................. 51 具体设计 ....................................................................................................................................... 51 支持 NAND闪存的启动程序设计 ..................................................................................... 51 支持 U-BOOT命令设计 ...................................................................................................... 52 结语 ............................................................................................................................................... 53 参考文献 ....................................................................................................................................... 53 U-boot 给 kernel 传参数和 kernel 读取参数—struct tag (以及补充) ............................................ 53 1 、u-boot 给 kernel 传 RAM 参数 ........................................................................................54 2 、Kernel 读取 U-boot 传递的相关参数 .............................................................................56 3 、关于 U-boot 的 bd 和 gd...............................................................................................59 U-BOOT源码分析及移植 ....................................................................................................................60 一、 u-boot 工程的总体结构: ..................................................................................................61 1、源代码组织 ....................................................................................................................61 2.makefile简要分析 ............................................................................................................61 3、u-boot 的通用目录是怎么做到与平台无关的?......................................................63 4、smkd2410 其余重要的文件 : ...................................................................................63 二、u-boot 的流程、主要的数据结构、内存分配 ................................................................64 1、u-boot 的启动流程: ...................................................................................................64 2、u-boot 主要的数据结构 ...............................................................................................66 3、u-boot 重定位后的内存分布: ...................................................................................68 三、u-boot 的重要细节 。 ........................................................................................................68 关于 U-boot 命令相关的编程 : ................................................................................. 73 四、U-boot 在 ST2410 的移植,基于 NOR FLASH和 NAND FLASH启动。......................... 76 1、从 smdk2410 到 ST2410: .............................................................................................. 76 2、移植过程: .................................................................................................................... 76 3、移植要考虑的问题: ...................................................................................................77 4、SST39VF1601: .................................................................................................................77 5、我实现的 flash.c主要部分: ...................................................................................... 78 6、增加从 Nand 启动的代码 : ..................................................................................... 82 7、添加网络命令。 ............................................................................................................ 87
MTK路由器的uboot串口升级命令主要用于通过串口连接至路由器的uboot引导程序,实现路由器固件的升级。以下是MTK路由器uboot串口升级命令的步骤: 1. 连接串口线:首先,将串口线的一端连接至路由器的串口接口,另一端连接至电脑的串口接口。 2. 打开串口工具:在电脑上打开串口通信工具,如SecureCRT、PuTTY等。 3. 配置串口工具:设置串口通信的参数,包括波特率、数据位、停止位、校验位等。通常情况下,MTK路由器的串口配置为115200波特率,8个数据位,无奇偶校验,1个停止位。 4. 开机进入uboot:重启MTK路由器,并在启动过程按下对应的进入uboot的按键,进入uboot命令行界面。 5. 确认uboot串口连接:在uboot命令行界面,输入命令"setenv stdin serial",然后输入"setenv stdout serial",即设置uboot为串口输入输出。 6. 启动tftp服务器:在电脑上启动tftp服务器,将待升级的固件放置于tftp服务器指定的目录下。 7. 下载固件:在uboot命令行界面,输入命令"tftpboot 0x81000000 <固件文件名>",即从tftp服务器下载固件到MTK路由器的内存。 8. 写入固件:输入命令"cp.b 0x81000000 0x9f0500000 <固件大小>",即将固件写入MTK路由器的闪存,其"<固件大小>"为固件的大小值。 9. 升级完成:等待命令执行完毕,固件升级过程即完成。接下来,可以通过输入"reset"命令将MTK路由器重新启动,从而使新固件生效。 需要注意的是,在进行uboot串口升级时,可能会对路由器造成风险,因此在操作前务必备份重要数据,并确保操作正确无误。另外,不同型号的MTK路由器可能会有稍许差异,具体升级操作还需参考相关设备的官方文档或资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值