嵌入式linux u boot,跟着韦东山学linux笔记之u-boot分析

makefile结构分析

配置过程

mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0

$0 $1 $2 $3 $4 $5 $6

APPEND=no # Default: Create new config file

BOARD_NAME="" # Name to print in make output

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"

#BOARD_NAME = 100ask24x0

echo "Configuring for ${BOARD_NAME} board..." #打印出来

#

# Create link to architecture specific headers

#

cd ../include

rm -f asm

ln -s asm-$2

asm #ln -s asm-arm

asm 建立链接到arm架构

rm -f asm-$2/arch

if [ -z "$6" -o "$6" = "NULL" ] ; then

ln -s ${LNPREFIX}arch-$3 asm-$2/arch

else

ln -s ${LNPREFIX}arch-$6

asm-$2/arch #ln -s arch-s3c24x0

asm-arm/arch

fi

if [ "$2" = "arm" ] ; then

rm -f asm-$2/proc

ln -s ${LNPREFIX}proc-armv

asm-$2/proc #ln -s proc-armv

asm-arm/proc 建立链接文件

fi

#

# Create include file for Make

#

echo "ARCH = $2"

> config.mk # >

建立新文件

echo "CPU =

$3" >>

config.mk #

>> 将前面的内容加入该文件

echo "BOARD = $4"

>> config.mk

config.mk内容

ARCH =

arm

CPU = arm920t

BOARD = 100ask24x0

SOC = s3c24x0

[ "$5" ] && [ "$5" != "NULL" ]

&& echo "VENDOR = $5"

>> config.mk

[ "$6" ] && [ "$6" != "NULL" ]

&& echo

"SOC = $6"

>> config.mk

#第六个参数存在且第六个参数不等于NULL,将echo

"SOC = $6"

加入config.mk

#

# Create board specific header file

#

if [ "$APPEND" = "yes" ] # Append to existing

config file

then

echo >>

config.h

else

>

config.h # Create new config

file

fi

echo "" >>config.h

echo "#include "

>>config.h

config.h的内容

#include

编译过程

OBJS = cpu/arm920/start.o

LIBS = lib_generic/libgeneric.a

LIBS += board/100ask24x0/lib100ask24x0.a

LIBS += cpu/arm920/libarm920.a

LIBS += net/libnet.a #将net目录下的.a文件打包成一个库

$(obj)u-boot.bin: $(obj)u-boot (elf)

$(OBJCOPY) ${OBJCFLAGS} -O

binary $< $@

$(obj)u-boot: depend version

$(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)

UNDEF_SYM=`$(OBJDUMP) -x

$(LIBS) |sed -n -e

's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\

cd $(LNDIR)

&& $(LD) $(LDFLAGS) $$UNDEF_SYM

$(__OBJS) \

--start-group

$(__LIBS) --end-group $(PLATFORM_LIBS) \

-Map

u-boot.map -o u-boot

#make 后从后面看命令

1、第一个文件:cpu/arm920t/start.s

2、链接地址:board/100ask24x0/u-boot.lds

+0x33F80000 #sdram 30000000开始

放在最上面的512k中

u-boot命令

1.cpu/arm920t/start.s

(u-boot第一阶段,汇编实现)

a.设SVC模式

b.关看门狗

c.屏蔽中断

d.初始化SDRAM

e.设置栈

f.时钟

g.代码从FLASH拷到SDRAM

h.清BSS段 #BSS段用来存放一些初值为0的全局变量

(u-boot第二阶段,C实现)

i.调用start_armboot(c函数)

(以上为硬件相关的初始化)

①启动内核

s = getenv("bootcmd")

run_command(s , ..)

②u-boot界面

readline(读入串口的数据)

run_command(s , ..)

u-boot的核心:命令(run_command)

u-boot内核启动

nand read.jffs2 0x30007FC0

;(将内核读到地址0x30007FC0去)

从 NAND读出内核:从哪里读,从kernel分区读

读到那里去

嵌入式Linux:flash没有分区表

bootm 0x30007FC0;(从地址0x30007FC0启动内核)

u-boot:Flash上存的内核:uImage

头部 + 真正的内核

in_load:加载地址

in_ep:入口地址

do_boot_linux

启动内核

1、设置启动参数

2、跳到入口地址去

注:为了以后回顾方便,在此备注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值