该u-boot是移植在JZ2440V2上的,但移植过程跟其他板子移植是一样的,我是在看韦东山老师视频做的笔记,每一步都很详细,有兴趣的可以看看。有错误的地方请指出,谢谢
bootloader引导内核
1、把内核读入内存
2、设置参数【TAG参数】
3、启动内核 R0寄存器=0 R1=机器ID R2=参数存放的地址
参考自己写bootloader
int main(void)
{
void (*theKernel)(int zero, int arch, unsigned int params);
volatile unsigned int *p = (volatile unsigned int *)0x30008000;
/* 0. 帮内核设置串口: 内核启动的开始部分会从串口打印一些信息,但是内核一开始没有初始化串口 */
uart0_init();
/* 1. 从NAND FLASH里把内核读入内存 */
puts("Copy kernel from nand\n\r");
nand_read(0x60000+64, (unsigned char *)0x30008000, 0x200000);
puthex(0x1234ABCD);
puts("\n\r");
puthex(*p);
puts("\n\r");
/* 2. 设置参数 */
puts("Set boot params\n\r");
setup_start_tag();
setup_memory_tags();
setup_commandline_tag("noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0");
setup_end_tag();
/* 3. 跳转执行 */
puts("Boot kernel\n\r");
theKernel = (void (*)(int, int, unsigned int))0x30008000;
theKernel(0, 362, 0x30000100);
/*
* mov r0, #0
* ldr r1, =362
* ldr r2, =0x30000100
* mov pc, #0x30008000
*/
puts("Error!\n\r");
/* 如果一切正常, 不会执行到这里 */
return -1;
}
内核:你目的是启动运用程序
1、根据R1寄存器的值来确定内核是否支持该机器[或者说是CPU],如果支持,调用该体系的初始化函数进行初始化
2、解析TAG参数
3、装载驱动程序,比如flash,网卡等
4、挂接根文件系统
5、启动运用程序
A、不同的开发板接的外设不一样,比如我们要使用串口打印信息,但开发板选中的晶振不一样,在初始化uart时
也是不一样的,比如接的网卡等都不一样,初始化函数是不同的,所以,我们需要修改初始化函数
移植过程:
1、解压内核
tar xjf linux-3.4.20.tar.bz2
2、配置内核[可以参考书籍“嵌入式Linux完全开发手册”]
a.修改makefile
vim Makefile
修改
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
b.选择默认的配置
查找一下有哪些默认配置
find -name "*defconfig"
有一大堆的默认配置,我们可以进去这个目录看一下
cd ./arch/arm/configs
- -支持mini2440了
看下2440有哪些
ls *2440*
看2410
2410更加全面一点
c.make s3c2410_defconfig [ 配置 ]
生成了.config文件,进去看下
支持这些板子
|