u-boot.srec:Motorola S-Record格式的可执行文件
对于S3C2410的开发板,执行“make smdk2410_config”、“make all”后生成的u-boot.bin可以烧入NOR Flash中运行。启动后可以看到串口输出一些信息后进入控制界面,等待用户的输入。
对于S3C2440的开发板,烧入上面生成的u-boot.bin,串口无输出,需要修改代码。
在修改代码之前,先看看上面两个命令“make smdk2410_config”、“make all”做了什么事情,以了解程序的流程,知道要修改哪些文件。
另外,编译U-Boot成功后,还会在它的tools子目录下生成一些工具,比如mkimage等。将它们复制到/usr/local/bin目录下,以后就可以直接使用它们了,比如编译内核时,会使用mkimage来生成U-Boot格式的内核映像文件uImage。
2. U-Boot的配置过程
在顶层Makefile中可以看到如下代码:
SRCTREE:= $(CURDIR)
……
MKCONFIG:= $(SRCTREE)/mkconfig
……
smdk2410_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
假定我们在u-boot-1.1.6的根目录下编译,则其中的MKCONFIG就是根目录下的mkconfig文件。$(@:_config=)的结果就是将“smdk2410_config”中的“_config”去掉,结果为
“smdk2410”。所以“make smdk2410_config”实际上就是执行如下命令:./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0
再来看看mkconfig的作用,在mkconfig文件开头第6行给出了它的用法:
06 # Parameters: Target Architecture CPU Board [VENDOR] [SOC]
这里解释一下概念,对于S3C2410、S3C2440,它们被称为SoC(Systemon Chip),上面除CPU外,还集成了包括UART、USB控制器、NANDFlash控制器等等设备(称为片内外设)。S3C2410/S3C2440中的CPU为arm920t。
以下,分步骤分析mkconfig的作用:
(1)确定开发板名称BOARD_NAME。
对于“./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0”命令,其中没有“--”、“-a”、“-n”等符号,所以第14~22行没做任何事情。第11、12行两个变量仍维持原来的值。
执行完第23行后,BOARD_NAME的值等于第1个参数,即“smdk2410”。
(2)创建到平台/开发板相关的头文件的链接。
略过mkconfig文件中的一些没有起作用的行:
第33行判断源代码目录和目标文件目录是否一样,可以选择在其他目录下编译U-Boot,这可以令源代码目录保持干净,可以同时使用不同的配置进行编译。不过本书直接在源代码目录下编译的,第33行的条件不满足,将执行else分支的代码。
第46~48行进入include目录,删除asm文件(这是上一次配置时建立的链接文件),然后再次建立asm文件,并令它链接向asm-$2目录,即asm-arm。
继续往下看代码:
第51行删除asm-$2/arch目录,即asm-arm/arch。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66092-7.html
你真心很棒