疯雨-版权所有,转载请注明【http://blog.csdn.net/u010346967】
uboot启动内核要注意两点:
第一,修改自启动命令。我的这个uboot版本是配置 CONFIG_BOOTCOMMAND (在配置文件配置 x210v3.h)
第二,修改启动参数(如果内核配置为uboot传递启动参数的话)。这个uboot版本是配置CONFIG_BOOTARGS。我不用uboot传参,就不改了。
关于内核的制作,我也有相应的文章,可以去看看。
下面修改启动命令:
128 //#define CONFIG_BOOTCOMMAND "run ubifsboot"
129 #define CONFIG_BOOTCOMMAND "bootm 0x20008000"
好既然是从0x20008000启动那么就要把内核代码copy到0x20008000这个内存地址吧。
去copy_to_mem里面添加拷贝函数,思路是这样的先把编译好的内核代码烧写到sd卡,然后在copy_to_mem里面添加复制代码,复制内核到内存地址0x20008000.
修改copy_to_mem,这里就不解释了 ,你应该自己能写出来,代码如下:
/**
* * This Function copy MMC(MoviNAND/iNand) Card Data to memory.
* * Always use EPLL source clock.
* * This function works at 20Mhz.
* * @param u32 DMA channel number: this is channel 2. Depend on your board.
* * @param u32 StartBlkAddress : Source card(MoviNAND/iNand MMC)) Address.(It must block address.)
* * @param u16 blockSize : Number of blocks to copy.
* * @param u32* memoryPtr : Buffer to copy from.
* * @param bool with_init : determined card initialization.
* * @return bool(u8) - Success or failure.
* */
#define CopySDMMCtoMem(z,a,b,c,e) (((int(*)(int, unsigned int, unsigned short, unsigned int*, int))(*((unsigned int *)0xD0037F98)))(z,a,b,c,e))
#define MMC_CHANNEL 2
#define BL2_START_SECTOR 49
#define KERNEL_START_SECTOR 1000
#define BL2_SECTOR_NUM 480
#define KERNEL_SECTOR_NUM (512*4*8)
#define BL2_MEM_START_ADDR 0x24800000
#define KERNEL_MEM_START_ADDR 0x20008000
#define KERNEL_SIZE 0x800000
void c