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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

目錄

u-boot分析之編譯體驗

1. 嵌入式系統與pc系統的啟動對比概述

2.如何應用補丁文件生成uboot.bin文件,步驟:

3. uboot里要實現的功能

3.1 uboot最終目的是啟動內核

3.2 為達到最終目的uboot要實現的功能(核心目的):

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

4.u-boot功能,結構,結合Makefile進行分析

4.1.分析配置過程make 100ask24x0_config 命令

4.2.分析編譯過程make all命令



u-boot分析之編譯體驗

?

1. 嵌入式系統與pc系統的啟動對比概述

2.如何應用補丁文件生成uboot.bin文件,步驟:

①解壓縮? ? ??

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

②打補丁? ? ?

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

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

③配置

? ? ? ? ? ? make 100ask24x0_config

④編譯

? ? ? ? ? ? make all

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

3. uboot里要實現的功能

3.1 uboot最終目的是啟動內核

1.從flash讀出內核放到sdram

2.啟動內核

3.2 為達到最終目的uboot要實現的功能(核心目的):

1.關看門狗

2.初始化時鐘(開發板上電,時鐘的運行頻率是12M,2440最大的頻率是400M)

3.初始化SDRAM

4.從讀Flash讀出內核

5.啟動內核

其中1,2,3等步是硬件相關初始化。

3.3 雖然uboot最終目的是啟動內核,但是在開發階段我們想增加更多的功能方便開發次要目的):

1.初始化串口

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

3.網卡,usb等等

4.u-boot功能,結構,結合Makefile進行分析

4.1.分析配置過程make 100ask24x0_config 命令

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

100ask24x0_config ? : ? unconfig

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

MKCONFIG定義為

MKCONFIG ? ?:= $(SRCTREE)/mkconfig

所以輸入make 100ask24x0_config命令相當于執行:

./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)確定開發板名稱BOARD_NAME

? ? ?BOARD_NAME等于$1

(2)創建到平臺/開發板相關的頭文件的鏈接

? ? ? ln -s asm-$2 asm

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

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

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

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

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

(4)創建開發板相關的頭文件include/config.h,內容追加為:

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

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

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

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

$?

最后運行的命令的結束代碼(返回值)。

$!

Shell最后運行的后臺Process的PID(后臺運行的最后一個進程的進程ID號)。

$$

Shell本身的PID(ProcessID,即腳本運行的當前進程ID號)。

$*

所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數,此選項參數可超過9個。

$#

添加到Shell的參數個數。

$@

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

$-

顯示shell使用的當前選項,與set命令功能相同。

$0

Shell本身的文件名。

$1~$n

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

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

4.2.分析編譯過程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.在執行make 的時候如果不指定目標,他就執行第一個目標

? ? ? ?(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.通過查看打印信息,可以看到這樣一句話。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 #鏈接的時候依賴兩個東西,原材料和鏈接腳本。鏈接腳本指示映像文件的組織結構。

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

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

?

轉載:https://blog.csdn.net/wenxiHuang/article/details/72510243

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。