(原创文章,作者:达达kiki,未经许可,谢绝转载)
对于诸如S3C2440/2410系列,网上关于u-boot移植资料是较多的,但是大部分皆是在看完视频后直接按照视频中的移植步骤来拽写的,缺少一种体系,给人的感觉稍显分散,本篇随笔以文件的形式从start.s到board.c的顺序,从第一层到其引用层的层次来讲述一个u-boot的工作过程,以及他是如何调用文件并且修改硬件的相关部分,从而掌握依托S3C2440为硬件基础的u-boot移植,较深刻的认识一个u-boot移植过程。
一、文件基础结构搭建
开发板:100ask24x0
芯片:S3C24x0
需要涉及的文件有README、mkconfig、config.mk、100ask24x0.h、100ask24x0(文件夹)。
文件引用处:/README
/mkconfig
/include/config.mk
/include/100ask24x0.h
/board/100ask24x0
1 README
对于一个文件首先需要阅读其说明文档,u-boot中的说明文档就是README,由该文档可知Makefile文件中需用到命令:
- make xx_config
- make
由此可知接下来需要通过Makefile详细去了解该配置过程。
2 Makefile
找到config命令行部分:
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
此处有调用MKCONFIG:
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
由此可知调用了源文件目录下的mkconfig
2.1 mkconfig
# Create include file for Make # echo "ARCH = $2" > config.mk echo "CPU = $3" >> config.mk echo "BOARD = $4" >> config.mk [ "$5" ] && [ "$5" != "NULL" ] && echo / "VENDOR = $5" >>config.mk [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
创建/include/config.mk,将$2~$6信息添加到其中,当通过make 100ask24x0_config传递信息后在config.mk中可以看到如下信息:
1 ARCH = ARM 2 CPU = arm920t 3 BOARD = 100ask24x0 4 SOC = s3c24x0
2.2 100ask24x0.h
在mkconfig末尾可以看到如下代码:
echo "#include <configs/$1.h>" >>config.h
由此可知需要新建立一个名为100ask24x0的头文件:100ask24x0.h
2.3 100ask24x0
Makefile从最前面看起我们可以发现有关于board信息的引用,比如:
LIBS += board/$(BOARDDIR)/lib$(BOARD).a
由此可知对应目的board我们需要在board下建立一个100ask24x0文件夹,文件夹可由smdk2410_config改编,文件内部的具体修改以及为什么选择smdk2410在后面描述。