|
硬件标准:RM9200,16M SDRAM,4M NORFLASH
目标:为了更快启动LINUX、同时使NORFLASH空余更多空间作为以后可能的FLASH盘。
手段:更改boot,绕过UBOOT,直接启动LINUX。
UBOOT的作用是可以方便的对存储空间进行更改然后引导LINUX,但是作为一个成熟的系统,其存储空间更改的可能性很低,即便需要更改,也可以通过LINUX驱动,像对文件操作一样更改其存储空间。所以本文不适用于绕过LINUX经常更改存储空间有朋友。
修改boot下源码main.c,其内容更改如下:
extern void AT91F_DBGU_Printk(char *);
extern char _stext,_etext,_sdata,_edata;
#define BOOT_VERSION "Boot 1.0"
unsigned int start_Kernel=0x10080000,\
size_Kernel=0xfffff,\
start_Ram=0x10180000,\
size_Ram=0x17ffff;
void boot() {
int i;
char* ptr=(char*)DST;
for(i=0;i<LEN;i++) ptr=0;
AT91F_DBGU_Printk ("Work-man\'s boot.\n\r");
/**************************************************************************/
//decompress_image(SRC,DST,LEN);
#if 0
void* memcpy(void* __dest, const void* __src, size_t __n)
{
int i;
char *d = (char *)__dest, *s = (char *)__src;
for (i=0;i<__n;i++) d = s;
}
#endif
/* memcpy(DST,SRC,LEN);*/
AT91F_DBGU_Printk("load the Kernel.\n\r");
memcpy(0x20008000,start_Kernel,size_Kernel);
AT91F_DBGU_Printk("load the Ramdisk.\n\r");
memcpy(0x20a00000,start_Ram,size_Ram);
/**************************************************************************/
AT91F_DBGU_Printk("Run the LINUX.\n\r");
asm("mov pc,%0" : : "r" (0x20008000));
};
void recover(char* s) {
for(;;);
};
其中增加定义:
unsigned int start_Kernel=0x10080000,\
size_Kernel=0xfffff,\
start_Ram=0x10180000,\
size_Ram=0x17ffff;
注释掉 /* memcpy(DST,SRC,LEN);*/
在后面追加:
AT91F_DBGU_Printk("load the Kernel.\n\r");
memcpy(0x20008000,start_Kernel,size_Kernel);//此条语句为把start_Kernel开始的地址加载size_Kernel的长度到0x20008000处,而此处就是Linux2.6内核的引导处;
AT91F_DBGU_Printk("load the Ramdisk.\n\r");
memcpy(0x20a00000,start_Ram,size_Ram);//此条语句为把start_Ram开始的地址加载size_Ram的长度到0x20a00000处,而此处就是RAMDISK的存储地址;
更改 asm("mov pc,%0" : : "r" (0x20008000));//原来DST改为0x20008000,此语句是跳到LINUX入口开始执行。
编译,生成boot.bin
注:作为start_Kernel、size_Kernel、start_Ram、size_Ram的内容要视具体情况而定,或是编译后使用UE找到对应数值进行更改。
start_Kernel为boot.bin长度
size_Kernel为zimage长度
start_Ram为boot.bin+zimage的长度
size_Ram为RAMDISK的长度
在XP命令行下使用copy/b boot.bin+zimage(内核)+ramdisk.gz(文件系统) FLT
注:括号内内容在使用时不能输入。
最后采用烧录工具如UBOOT或JTAG把生成文件FLT烧到FLASH的址0x10000000处即可。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|