u-boot的快捷菜单详解 (for mini2440)

本章来分析u-boot的快捷菜单

FriendlyARMMenu在main.c函数的main_loop ()中被调用:

{
	void FriendlyARMMenu(void);
	FriendlyARMMenu();
}

FriendlyARMMenu() 源码如下:

void FriendlyARMMenu(void)
{
    char cmd_buf[300];
	while(1) {
		int c;
		printf("##### FriendlyARM U-Boot(" RELEASE_MARK ") for 2440 #####\n");
		printf("[f] Format the nand flash\n");
		printf("[v] Download u-boot.bin\n");
		printf("[k] Download Linux kernel\n");
		printf("[y] Download root yaffs2 image\n");
		printf("[a] Download Absolute User Application\n");
		printf("[s] Set the boot parameter of Linux\n");
		printf("[b] Boot Linux\n");
		printf("[r] Reboot\n");
		//printf("[d] Download and Run\n");
		printf("[q] Quit to shell\n");
		printf("Enter your Selection:");

		c = getc();
		printf("%c\n", c >= ' ' && c <= 127 ? c : ' ');

		switch(c) {
		case 'F': case 'f':
			strcpy(cmd_buf, "nand erase");
			run_command(cmd_buf, 0);
			break;

		case 'V': case 'v':
			strcpy(cmd_buf, "usbslave 1 30000000; nand erase 0 40000; nand write.i 30000000 0 $(filesize_aligned);saveenv");
			run_command(cmd_buf, 0);
			break;

		case 'K': case 'k':
			strcpy(cmd_buf, "usbslave 1 30000000; nand erase 60000 500000; nand write.i 30000000 60000 $(filesize_aligned);saveenv");
			run_command(cmd_buf, 0);
			break;

		case 'Y': case 'y':
			strcpy(cmd_buf, "usbslave 1 30000000; nand erase 560000; nand write.yaffs 30000000 560000 $(filesize)");
			run_command(cmd_buf, 0);
			break;

		case 'A': case 'a':
			strcpy(cmd_buf, "usbslave 1 30000000; nand erase; nand write.i 30000000 0 $(filesize_aligned)");
			run_command(cmd_buf, 0);
			break;

		case 'S': case 's':
			strcpy(cmd_buf, "askenv bootargs \"linux cmd line:\" 200;saveenv");
			run_command(cmd_buf, 0);
			break;
		case 'D': case 'd':
			strcpy(cmd_buf, "usbslave 1 30000000; go 30000000");
			run_command(cmd_buf, 0);
			break;

		case 'B': case 'b': case 'R': case 'r':
			strcpy(cmd_buf, "reset");
			run_command(cmd_buf, 0);
			while(1);

		case 'Q': case 'q':
			return;

		default:
			;
		}
	}
}

1、分析 “[v] Download u-boot.bin\n"这条命令的执行过程:

strcpy(cmd_buf, "usbslave 1 30000000; nand erase 0 40000; nand write.i 30000000  0 $(filesize_aligned);saveenv");

usbslave 1 30000000;这条指令是把usb接收发送的数据下载到0x30000000。
nand erase 0 40000;这条指令是擦除内核分区0~0x00040000地址的数据。
nand write.i 30000000 0 $ (filesize_aligned); 这条指令是将0x30000000地址开始( $ (filesize_aligned) 大小的文件)烧写到nand flash内核分区中 0~$(filesize_aligned)地址空间中去。
saveenv这条指令是保存当前环境变量到nandflash。

2、分析 “[k] Download Linux kernel\n"这条命令的执行过程:

strcpy(cmd_buf, "usbslave 1 30000000; nand erase 60000 500000; nand write.i 30000000 60000 $(filesize_aligned);saveenv");

usbslave 1 30000000;这条指令是把usb接收发送的数据下载到0x30000000。
nand erase 60000 500000;这条指令是擦除内核分区60000~0x560000地址的数据(擦除60000 地址后面500000个地址数据)。
nand write.i 30000000 60000 $ (filesize_aligned); 这条指令是将0x30000000地址开始( $ (filesize_aligned) 大小的文件)烧写到nand flash内核分区中 60000 ~$(filesize_aligned)地址空间中去。
saveenv这条指令是保存当前环境变量到nandflash。

3、run_command(cmd_buf, 0);

通过run_command()函数运行strcpy拷贝到cmd_buf中的指令。
例如:"usbslave 1 30000000; nand erase 60000 500000; nand write.i 30000000 60000 $(filesize_aligned);saveenv"这条指令,由run_command解析并且执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yfw&武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值