linux系统移植分为两部分内容:
1,引导程序:u-boot的移植
2,linux内核的移植
3,根文件系统的移植
这些就是U-boot的代码,官方的,看看就能整理出如下信息。
做好移植,先需要关心和了解以下文件夹。
u-boot要改的信息:
board文件夹(重点改处理器外接的那些部份,处理器里面的芯片公司官方多数已经做好了。)
cpu文件夹:start.S启动过程。
lib_arm文件夹:arm相关库文件。
移植过程:start.S——board.c——main.c
有时就改一下配置就OK了:include/configs
grep -R "字符串" ./* 查找字符串。
下面分析一下start.S:
首先校验信息,芯片手册上已经说明了:
.word 0x2000
.word 0x0
.word 0x0
.word 0x0
正式开始:
各种异常:
.globl _start
_start: breset
ldrpc, _undefined_instruction
ldrpc, _software_interrupt
ldrpc, _prefetch_abort
ldrpc, _data_abort
ldrpc, _not_used
ldrpc, _irq
ldrpc, _fiq
_TEXT_BASE: //虚拟起始地址,开启MMU之后。
.wordTEXT_BASE
_TEXT_PHY_BASE:
.wordCFG_PHY_UBOOT_BASE //物理起始地址
之后:
reset:切换到管理模式。
cpu初始化——cpu_init_crit:cache,关掉MMU,电源管理。
然后重点关注:lowlevel_init(board文件中)主要改这个函数,根据不同的板子。
判断从哪里启动,就是扳那就按钮。
从nand flash还是从哪里开始启动。启动后拷贝代码。将nand flash的代码拷贝到dram中。
清bss段
ldrpc, _start_armboot绝对跳转,跳到boot.c中。