u-boot打补丁、编译、烧写、实验
打补丁:patch命令 patch -p1(省略第一个目标地址)< ../ 补丁文件名
u-boot分析
配置: make 100ask24x0_config
编译:make
u-boot要实现的功能
核心功能: 1.关看门狗 开发功能:1.烧Flash
2.初始化时钟 2.网卡
3..初始化SDRAM 3.串口
4.从Flash内读内核 4.USB
5..启动内核(最终目的)
u-boot命令通过创建命令结构体(cmd_tbl_t )实现,下面通过添加一个简单的hello命令学习它。
参考common/目录下的cmd_bootm.c创建简单的hello命令,新建cmd_hello.c文件如下:
#include <common.h>
#include <watchdog.h>
#include <command.h>
#include <image.h>
#include <malloc.h>
#include <zlib.h>
#include <bzlib.h>
#include <environment.h>
#include <asm/byteorder.h>
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int i;
printf ("hello,world!, %d\n", argc );
for (i = 0; i < argc ; i++)
{
printf("argv[%d]: %s\n" , i , argv[i] );
}
return 0;
}
U_BOOT_CMD(
hello, CFG_MAXARGS, 1,do_hello,
"hello - just for test\n",
"hello, long help ......\n"
);
接下来,把新建的cmd_hello.c文件放到u_boot../command/目录下,u-boot-1.1.6$ vi common/Makefile 添加cmd_hello.o;重新编译make得到u_boot.bin。
make distclean //make clean仅仅是清除之前编译的可执行文件及配置文件;而make distclean要清除所有生成的文件。
make 100ask24x0_config
make
补充:argc,argv 用命令行编译程序时有用。
主函数main中变量(int argc,char *argv[ ])的含义
有些编译器允许将main()的返回类型声明为void,这已不再是合法的C++
main(int argc, char *argv[ ], char **env)才是UNIX和Linux中的标准写法。
argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数
* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串