日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

u-boot分析之编译体验(零)

發(fā)布時(shí)間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 u-boot分析之编译体验(零) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

u-boot分析之編譯體驗(yàn)

1. 嵌入式系統(tǒng)與pc系統(tǒng)的啟動(dòng)對(duì)比概述

2.如何應(yīng)用補(bǔ)丁文件生成uboot.bin文件,步驟:

3. uboot里要實(shí)現(xiàn)的功能

3.1 uboot最終目的是啟動(dòng)內(nèi)核

3.2 為達(dá)到最終目的uboot要實(shí)現(xiàn)的功能(核心目的):

3.3 雖然uboot最終目的是啟動(dòng)內(nèi)核,但是在開發(fā)階段我們想增加更多的功能方便開發(fā)(次要目的):

4.u-boot功能,結(jié)構(gòu),結(jié)合Makefile進(jìn)行分析

4.1.分析配置過(guò)程make 100ask24x0_config 命令

4.2.分析編譯過(guò)程make all命令



u-boot分析之編譯體驗(yàn)

?

1. 嵌入式系統(tǒng)與pc系統(tǒng)的啟動(dòng)對(duì)比概述

2.如何應(yīng)用補(bǔ)丁文件生成uboot.bin文件,步驟:

①解壓縮? ? ??

? ? ? ? ? ? tar -xjvf u-boot-1.1.6.tar.bz2

②打補(bǔ)丁? ? ?

? ? ? ? ? ? cd u-boot-1.1.6/

? ? ? ? ? ??patch -p1 < ../u-boot-1.1.6_jz2440.patch? //patch -p? <? ../補(bǔ)丁文件

③配置

? ? ? ? ? ? make 100ask24x0_config

④編譯

? ? ? ? ? ? make all

在編譯得到u-boot.bin文件之后,我們就可以將文件下載到開發(fā)板nor flash上去,啟動(dòng)板子串口3秒內(nèi)按任意鍵輸出界面如下,出現(xiàn)的命令菜單選項(xiàng)并非uboot自帶,而是后續(xù)添加上去的,如何添加命令菜單后續(xù)有介紹。uboot支持很多的命令,輸入'q'退出菜單模式,進(jìn)入命令行模式,在命令行輸入?或者h(yuǎn)elp查看支持的所有命令。特別的,輸入menu回到菜單模式。菜單的功能是通過(guò)usb(usb device線)下載uboot,內(nèi)核,文件系統(tǒng)。

3. uboot里要實(shí)現(xiàn)的功能

3.1 uboot最終目的是啟動(dòng)內(nèi)核

1.從flash讀出內(nèi)核放到sdram

2.啟動(dòng)內(nèi)核

3.2 為達(dá)到最終目的uboot要實(shí)現(xiàn)的功能(核心目的):

1.關(guān)看門狗

2.初始化時(shí)鐘(開發(fā)板上電,時(shí)鐘的運(yùn)行頻率是12M,2440最大的頻率是400M)

3.初始化SDRAM

4.從讀Flash讀出內(nèi)核

5.啟動(dòng)內(nèi)核

其中1,2,3等步是硬件相關(guān)初始化。

3.3 雖然uboot最終目的是啟動(dòng)內(nèi)核,但是在開發(fā)階段我們想增加更多的功能方便開發(fā)次要目的):

1.初始化串口

2.燒寫flash(這樣就可以通過(guò)網(wǎng)絡(luò),串口下載將uboot,kenel,filesystem下載到flash上去)

3.網(wǎng)卡,usb等等

4.u-boot功能,結(jié)構(gòu),結(jié)合Makefile進(jìn)行分析

4.1.分析配置過(guò)程make 100ask24x0_config 命令

1.在uboot頂層目錄下的makefile中搜索100ask24x0_config 結(jié)果如下

100ask24x0_config ? : ? unconfig

100ask24x0_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

MKCONFIG定義為

MKCONFIG ? ?:= $(SRCTREE)/mkconfig

所以輸入make 100ask24x0_config命令相當(dāng)于執(zhí)行:

./mkconfig? ?100ask24x0? ?arm? ?arm920t? ?100ask24x0? ?NULL? ? s3c24x0

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

mkconfig的作用,在mkconfig文件開頭第六行給出了它的用法:

06 # Parameters: Target? ?Architecture? ?CPU? ?Board? ?[VENDOR]? ?[SOC]

分步驟分析mkconfig的作用:

(1)確定開發(fā)板名稱BOARD_NAME

? ? ?BOARD_NAME等于$1

(2)創(chuàng)建到平臺(tái)/開發(fā)板相關(guān)的頭文件的鏈接

? ? ? ln -s asm-$2 asm

? ? ? ln -s arch-$6?asm-$2/arch

? ? ? ln -s proc-armv asm-$2/proc? ? ? ??#如果$2不是arm的話,此行沒(méi)有

(3)創(chuàng)建頂層Makefile包含的文件include/config.mk,內(nèi)容追加為:

? ? ? ? ARCH ? = $2
? ? ? ??CPU ? ?= $3
? ? ? ? BOARD ?= $4

? ? ? ? VENDOR = $5? ? ? ? ? ? ? ? ? ?#$5為空,或者是NULL的話,此行沒(méi)有
? ? ? ??SOC ? ?= $6? ? ? ? ? ? ? ? ? ? ? ? #$6為空,或者是NULL的話,此行沒(méi)有

(4)創(chuàng)建開發(fā)板相關(guān)的頭文件include/config.h,內(nèi)容追加為:

/* Automatically generated - do not edit */
#include <configs/100ask24x0.h>

從這4個(gè)結(jié)果可以知道,如果要在board目錄下新建一個(gè)開發(fā)板<board_name>的目錄,則在include/configs目錄下也要建立一個(gè)文件<board_name>.h,里面存放的就是開發(fā)板<board_name>的配置信息。

-----------------------------------------------------------------------------------------------------------------------

擴(kuò)展:?Shell腳本中$?、$!、$$、$*、$#、$@、$-、$0、$1~$n等的意義說(shuō)明

$?

最后運(yùn)行的命令的結(jié)束代碼(返回值)。

$!

Shell最后運(yùn)行的后臺(tái)Process的PID(后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的進(jìn)程ID號(hào))。

$$

Shell本身的PID(ProcessID,即腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào))。

$*

所有參數(shù)列表。如"$*"用「"」括起來(lái)的情況、以"$1 $2 … $n"的形式輸出所有參數(shù),此選項(xiàng)參數(shù)可超過(guò)9個(gè)。

$#

添加到Shell的參數(shù)個(gè)數(shù)。

$@

所有參數(shù)列表。如"$@"用「"」括起來(lái)的情況、以"$1" "$2" … "$n" 的形式輸出所有參數(shù)。$@ 跟$*類似,但是可以當(dāng)作數(shù)組用。

$-

顯示shell使用的當(dāng)前選項(xiàng),與set命令功能相同。

$0

Shell本身的文件名。

$1~$n

添加到Shell的各參數(shù)值。$1是第1參數(shù)、$2是第2參數(shù)…。

-----------------------------------------------------------------------------------------------------------------------

4.2.分析編譯過(guò)程make all命令

1.incldue $(OBJTREE)/include/config.mk

2.ifeq($(ARCH),arm) CROSS_COMPLIE = arm-linux-

3.include $(TOPDIR)/config.mk

4.OBJS、OBJS、LIBS等變量:

OBJS = cpu/arm920t/start.o

OBJS = lib_genertic/libgeneric.a

LIBS+=board/100ask24x0/lib100ask24x0.a

LIBS+=cpu/arm920t/libarm920t.a

5.在執(zhí)行make 的時(shí)候如果不指定目標(biāo),他就執(zhí)行第一個(gè)目標(biāo)

? ? ? ?(1)? all: $(ALL)? ? ? ? ? ? ? ? # all依賴于ALL
? ? ? ?(2)? ALL = (obj)u?boot.srec(obj)u-boot.bin(obj)System.map(U_BOOT_NAND)
? ? ? ?(3)? 我們的目的是生成u-boot.bin
? ? ? ?(4)? (obj)u?boot.bin:(obj)u-boot? ? ? ?#u-boot.bin又依賴于elf格式的u-boot
? ? ? ?(5) (obj)u?boot:dependversion(SUBDIRS) (OBJS)(LIBS)$(LDSCRIPT)……? ?#u-boot又依賴于OBJS,?LIBS,鏈接腳本等
6.不想那么麻煩的分析makefile,可以輸入make命令后查看最后面的打印信息

7.通過(guò)查看打印信息,可以看到這樣一句話。arm-linux-ld -Bstatic -T /work/sysytem/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext 0x33f80000 $UNDEF_SYM cpu/arm920t/start.o #鏈接的時(shí)候依賴兩個(gè)東西,原材料和鏈接腳本。鏈接腳本指示映像文件的組織結(jié)構(gòu)。

8.分析u-boot.lds文件(.=0x00000000 0x00000000要加上0x33f80000=uboot運(yùn)行地址)一開始運(yùn)行的文件是cpu/arm920t/start.o文件

9.鏈接地址(運(yùn)行地址)由連接文件board/100ask24x0/u-boot.lds和board/100ask24x0/config.mk TEXT_BASE共同指定,TEXT_BASE在頂層目錄的config.mk LDFLAGS中被引用。

?

轉(zhuǎn)載:https://blog.csdn.net/wenxiHuang/article/details/72510243

總結(jié)

以上是生活随笔為你收集整理的u-boot分析之编译体验(零)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。