u-boot配置过程分析(ARM)
来源:互联网 发布:java判断文件编码格式 编辑:程序博客网 时间:2024/05/16 07:19
1.u-boot源码结构
源码目录下一般包含以下目录:
(1) 平台相关的或者开发板相关的,比如cpu/、baord/
(2) 通用的函数,比如common/
(3)通用的设备驱动,比如drivers/
(4)u-boot工具、示例程序、文档,比如/tools/、/examples、/doc
2.u-boot生成配置文件过程
根据顶层readme,如果使用board/板名,必须先执行 make 板名_config,然后执行make all
在Makefile里面有下面
smdk2410_config:unconfig@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
而MKCONFIG如下
OBJTREE:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))SRCTREE:= $(CURDIR)TOPDIR:= $(SRCTREE)LNDIR:= $(OBJTREE)exportTOPDIR SRCTREE OBJTREEMKCONFIG:= $(SRCTREE)/mkconfigexport MKCONFIG
转换后就是./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0
下面着重分析这个mkconfig
(1)确定开发板名称
APPEND=no# Default: Create new config fileBOARD_NAME=""# Name to print in make outputwhile [ $# -gt 0 ] ; docase "$1" in--) shift ; break ;;-a) shift ; APPEND=yes ;;-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;*) break ;;esacdone[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
主要判定有没有后缀符-a、--、-n等,默认没有使用,所以结果为BOARD_NAME = smdk2410
(2)创建平台/开发板相关的头文件的链接,(包括asm_arm,asm_arm/arch,asm_arm/proc) 如下代码所示
## Create link to architecture specific headers#if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/include/asm-$2 asmLNPREFIX="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asmelsecd ./includerm -f asmln -s asm-$2 asmfirm -f asm-$2/archif [ -z "$6" -o "$6" = "NULL" ] ; thenln -s ${LNPREFIX}arch-$3 asm-$2/archelseln -s ${LNPREFIX}arch-$6 asm-$2/archfiif [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/procfi
这里主要是删除之前的链接,然后进行重新链接,主要考虑不同平台下配置不一样
(3)创建include/config.mk
## Create include file for Make#echo "ARCH = $2" > config.mkecho "CPU = $3" >> config.mkecho "BOARD = $4" >> config.mk[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
将ARCH、CPU、BOARD、VENDER、SOC,这里$5=NULL,所以只输出了四项
如下配置mini2440生成的结果
ARCH = armCPU = arm920tBOARD = mini2440SOC = s3c24x0
(4)创建开发板相关的头文件 include/config.h
## Create board specific header file#if [ "$APPEND" = "yes" ]# Append to existing config filethenecho >> config.helse> config.h# Create new config filefiecho "/* Automatically generated - do not edit */" >>config.hecho "#include <configs/$1.h>" >>config.h
这里APPEND=no,请看(1)处
比如mini2440生成的文件为
/* Automatically generated - do not edit */#include <configs/mini2440.h>
从以上可以知道,移植时候可以在board目录新建一个开发板的目录,如board/mini2440/
然后会自动生成头文件,上面的include/config.h
另外还需要做一些配置,主要在include/configs/板名.h,比如smdk2410.h
包括两类宏的开启可以启用有关的配置
(1)选项 前缀为CONFIG_ 他们用于选择CPU、SOC、开发板类型、设置系统时钟、选择设备驱动、......
/* * High Level Configuration Options * (easy to change) */#define CONFIG_ARM920T1/* This is an ARM920T Core*/#defineCONFIG_S3C24101/* in a SAMSUNG S3C2410 SoC */#define CONFIG_SMDK24101/* on a SAMSUNG SMDK2410 Board *//* input clock of PLL */#define CONFIG_SYS_CLK_FREQ12000000/* the SMDK2410 has 12MHz input clock */#define USE_920T_MMU1#undef CONFIG_USE_IRQ/* we don't need IRQ/FIQ stuff */
设置命令、波特率、......
/* * Command line configuration. */#include <config_cmd_default.h>#define CONFIG_CMD_CACHE#define CONFIG_CMD_DATE#define CONFIG_CMD_ELF#define CONFIG_BOOTDELAY3/*#define CONFIG_BOOTARGS"root=ramfs devfs=mount console=ttySA0,9600" *//*#define CONFIG_ETHADDR08:00:3e:26:0a:5b */#define CONFIG_NETMASK 255.255.255.0#define CONFIG_IPADDR10.0.0.110#define CONFIG_SERVERIP10.0.0.1/*#define CONFIG_BOOTFILE"elinos-lart" *//*#define CONFIG_BOOTCOMMAND"tftp; bootm" */#if defined(CONFIG_CMD_KGDB)#define CONFIG_KGDB_BAUDRATE115200/* speed to run kgdb serial port *//* what's this ? it's not used anywhere */#define CONFIG_KGDB_SER_INDEX1/* which serial port to use */#endif
注意命令中有个config_cmd_default.h 里面包含了默认的uboot命令,可以在里面增加或者删除,也可以在其下面定义有关命令
下面主要是配置启动,网络参数
(2)参数 前缀为CFG_,用于设置malloc缓冲池的大小、uboot提示符、uboot下载默认加载地址、flash起始地址、......
/* * Size of malloc() pool */#define CFG_MALLOC_LEN(CONFIG_ENV_SIZE + 128*1024)#define CFG_GBL_DATA_SIZE128/* size in bytes reserved for initial data *//* * Hardware drivers */#define CONFIG_DRIVER_CS89001/* we have a CS8900 on-board */#define CS8900_BASE0x19000300#define CS8900_BUS161 /* the Linux driver does accesses as shorts */
命令提示符、字符缓冲区的大小、默认下载地址、.......
/* * Miscellaneous configurable options */#defineCFG_LONGHELP/* undef to save memory*/#defineCFG_PROMPT"SMDK2410 # "/* Monitor Command Prompt*/#defineCFG_CBSIZE256/* Console I/O Buffer Size*/#defineCFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */#defineCFG_MAXARGS16/* max number of command args*/#define CFG_BARGSIZECFG_CBSIZE/* Boot Argument Buffer Size*/#define CFG_MEMTEST_START0x30000000/* memtest works on*/#define CFG_MEMTEST_END0x33F00000/* 63 MB in DRAM*/#undef CFG_CLKS_IN_HZ/* everything, incl board info, in Hz */#defineCFG_LOAD_ADDR0x33000000/* default load address*/
里面还有stack、物理内存映射、Nor Flash设置、BOOTP设置、.......
3.总结开发板配置过程:
开发板名称->头文件链接->include/config.mk->include/config.h
文档:
#!/bin/sh -e# Script to create header files and links to configure# U-Boot for a specific board.## Parameters: Target Architecture CPU Board [VENDOR] [SOC]## (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>##./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0 $0 $1 $2 $3 $4 $5 $6APPEND=no # Default: Create new config fileBOARD_NAME="" # Name to print in make output[ "${BOARD_NAME}" ] || BOARD_NAME="$1"#BOARD_NAME= smdk2410[ $# -lt 4 ] && exit 1[ $# -gt 6 ] && exit 1echo "Configuring for ${BOARD_NAME} board..."## Create link to architecture specific headers#cd ./includerm -f asmln -s asm-$2 asm # 建立链接文件 ln -s asm-arm asmrm -f asm-$2/arch # asm-arm/archln -s ${LNPREFIX}arch-$6 asm-$2/arch # ln -s arch-s3c24x0 asm-arm/archif [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc # ln -s proc-armv asm-arm/procfi## Create include file for Make#echo "ARCH = $2" > config.mkecho "CPU = $3" >> config.mkecho "BOARD = $4" >> config.mk#ARCH = arm#CPU = arm920t#BOARD = smdk2410[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk#SOC = s3c24x0## Create board specific header file#> config.h# Create new config fileecho "/* Automatically generated - do not edit */" >>config.hecho "#include <configs/$1.h>" >>config.h#/* Automatically generated - do not edit */##include <configs/smdk2410.h>exit 0
- u-boot配置过程分析(ARM)
- u-boot编译链接过程分析(ARM)
- 【u-boot】u-boot-2016.09 make配置过程分析
- U-boot分析第1章------------------Makefile(配置过程)
- u-boot-2012.10分析一配置过程
- u-boot-2012.10分析一配置过程
- U-Boot的配置过程分析
- u-boot-2016.09 make配置过程分析
- (二) u-boot 配置、编译过程分析
- u-boot-2016.09 make配置过程分析
- 【u-boot】u-boot-2017.05启动过程分析(一)
- U-Boot配置过程
- u-boot启动过程分析(源码)
- u-boot启动过程分析(一)
- u-boot-1.1.6的配置编译过程分析.doc
- u-boot-2012.04.01的配置编译过程分析.doc
- 初学u-boot之源码配置编译过程分析
- u-boot 2014-10 Makefile 配置过程分析
- HTTP协议 (七) Cookie
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- u-boot启动过程源码分析之第二阶段(S3C24XX系列)
- thinkphp 出现bom 头
- TI KeyStone架构支持L2及传输处理
- u-boot配置过程分析(ARM)
- java笔试题
- u-boot编译链接过程分析(ARM)
- linux chmod命令参数及用法详解--文件文件夹权限设定命令
- 内核参考书籍及文章
- Linux chmod命令详解
- u-boot移植(Mini2440)
- 黑马程序员—java高新技术(一)
- 18、SQL Server 视图