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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Bcm96xx 系列芯片 SDK介绍(一)

發布時間:2023/12/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bcm96xx 系列芯片 SDK介绍(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Bcm96xx系列SDK支持的芯片從代碼的target目錄就可以看出63186362 63268 6328 6368 6818 6818O 6838O 68500 等芯片。此SDK使用的Linux內核版本算是比較高的了Linux3.4

Broadcom的網站提供下載:bcm963xx_4.14L.04_data_src.tar.gz


1 目錄結構

bcmdrivers/ -- broadcom 的驅動包括開源公開的和私有不公開的

cfe/ -- broadcom 芯片的boot代碼

data-model/ -- 一些xmltxt形式的業務配置文件

docs/ -- 關于sdk的一些文檔放在這里

hostTools/ -- 版本生成和制作工具的源碼

images/-- 存放生成的版本文件

kernel/ -- linux內核代碼

release/ -- 一些lisence copyright release 等說明及pl腳本

shared/ -- 包含cfebcmdrivers都需要用到的驅動代碼

targets/ -- 包含芯片目錄,文件系統,bcm的內核配置文件以及版本文件等

userspace/ -- 應用層代碼都在這里


底層驅動開發者需要關注bcmdrivers目錄和kernel目錄,而上層應用開發者需要關注userspace目錄的代碼。若要更改Boot則需要關注cfe目錄,它里面存放了boot的源代碼。版本制作則需要關注hostTools目錄及targets目錄,前者包含制作版本工具的源碼,而后者包含了文件系統生成的來源,當然docs目錄下的文檔是每個新手開發者一開始就要學習的。


需要說明的是以上的目錄并不包括編譯工具鏈,其編譯工具鏈是單獨發布的,我的編譯工具鏈放置在這里:

/opt/toolchains/crosstools-mips-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21



2 編譯架構

從目錄結構可以大致的了解SDK整體的代碼組織結構,而編譯架構則是更深入了解SDK層次的直接途徑,包括驅動和應用層代碼的層次結構、哪些代碼在用哪些代碼未用,Linux內核的宏配置,文件系統如何制作,版本文件如何生成,應用層的CMS如何運轉,如何在現有SDK上新增驅動代碼和應用層代碼,以及如何配置它們的編譯。SDK的編譯可以整編,也可以增量編譯。

整體編譯命令:

makePROFILE=xxxx

這里的xxxx就是target目錄下的子目錄,如makePROFILE=96838GWO

其中96838GWOtarget目錄下的一個子目錄,上述編譯命令的結果是編譯出適合在BCM68380芯片上運行的版本。


增量編譯命令:
makePROFILE=xxxx cfe --
表示編譯
boot

makePROFILE=xxxx kernelbuild --表示編譯linux內核

makePROFILE=xxxx modbuild --表示編譯內核模塊

makePROFILE=xxxx userspace --表示編譯應用層代碼


上面的增量編譯命令使用后,如果要生成版本則都還有使用下面的版本生產編譯命令

makePROFILE=xxxx buildimage --表示生成版本文件


生成的版本文件保存在targets/xxxx/目錄下,名如xxxx_nand_cferom_fs_image_128_jffs2.w


如何利用版本文件對單板進行升級比較簡單,就不再這里講解了。下面我們進入編譯架構,即Makefile的解析。對于編譯架構的分析,最好是一邊看Makefile,一邊看編譯log來分析,否則單單閱讀makefile太乏味了。


在解析編譯架構之前,先概要的說明整個編譯的流程:

1首先,檢查編譯環境,檢查傳入的PROFILE變量是否與上次編譯時一致,等等檢查

2創建target/fs.install目錄下的子目錄,后期文件系統的制作與這個目錄有關。

3創建linux內核include目錄的ln鏈接

4生成linux內核配置文件defconfig,并使用此配置文件編譯linux內核

5編譯linux內核模塊.ko

6編譯data-model

7編譯userspace,各個應用層的程序,busybox等。

8編譯hosttool,文件系統制作工具,版本生產工具,部分放入文件系統的小程序等

9最后生成文件系統,生成版本。


接著直接開始剖析Makefile

編譯的入口是頂層目錄下的Makefile文件,同目錄的make.commonmake.deprulesversion.makemake.modsw都直接或者間接的includeMakefile中,這幾個文件都非常重要,make.common定義了大堆的變量來表示編譯工具鏈,編譯目錄,編譯庫文件,編譯頭文件,編譯目標,編譯選項等,貫穿編譯的始終,其重要性不言而喻。make.deprules定義了*.c文件到*.d文件的生成規則,make.version中定義了sdk版本信息,make.modsw定義了一些編譯目標。


編譯入口:

make編譯命令會編譯Makefile內遇到的第一個目標:

all:prebuild_checks all_postcheck1


明顯all目標依賴于其它兩個目標prebuild_checksall_postcheck1

all_postcheck1目標又依賴于一大堆的其他目標

all_postcheck1:profile_saved_check sanity_check \

create_installkernelbuild modbuild kernelbuildlite \

userspace gdbserver vodsl dectd hosttools buildimage


我們先將其放在一邊來看看prebuild_checks目標這個目標在Makefile中并不存在而是在make.common但別忘了Makefile包含了make.common

BUILD_DIR= $(shell pwd)

include$(BUILD_DIR)/make.common


這樣Makefile也就包含make.common中定義的prebuild_checks目標

prebuild_checks:

@echo"shell is $(SHELL). Bash version is $(shell echo$$BASH_VERSION)"

@if[ -z "$(shell echo $$BASH_VERSION)" ]; then \

echo"***************************************************"; \

echo"ERROR: $(SHELL) does not invoke bash shell"; \

echo"***************************************************"; \

exit1; \

fi


....



prebuild_checks這個目錄定義的動作較長但最終作用就是檢查編譯環境版本信息等編譯log上可以看出

shellis /bin/sh. Bash version is 4.1.2(1)-release

Checkingbcm tools version

Rel1.0

Checkingmake version

3.81

Checkinghost kernel version

2.6.32-358.el6.x86_64

Checkingautomake version:

1.11.1

Checkingautoconf version:

2.63

Checkingtar version:

1.24

Checkingpatch version:

2.6


profile_saved_checksanity_check 目標都是對于PROFILE的檢查比如如果不給PROFIEL參數則使用上次編譯時的PROFIEL參數再比如如果兩次編譯給出的PROFIEL不同則會提示。


因此上述幾個**_check目標就是編譯流程所講的1



接著,create_install目標的規則

create_install:

mkdir-p $(PROFILE_DIR)/fs.install/etc

mkdir-p $(INSTALL_DIR)/bin

mkdir-p $(INSTALL_DIR)/lib

mkdir-p $(INSTALL_DIR)/etc/snmp

mkdir-p $(INSTALL_DIR)/etc/iproute2

mkdir-p $(INSTALL_DIR)/opt/bin

mkdir-p $(INSTALL_DIR)/opt/modules

mkdir-p $(INSTALL_DIR)/opt/scripts


其目的是創建文件系統目錄,在版本制作時會間接使用此目錄制作文件系統。

這是介紹的編譯流程所講的2


kernelbuild:kernellinks $(BCM_SWVERSION_FILE)

$(callpre_kernelbuild)

cd$(KERNEL_DIR); $(MAKE) -j $(ACTUAL_MAX_JOBS)



definepre_kernelbuild

@echo

@echo-------------------------------------------

@echo... starting kernel build at $(KERNEL_DIR)

@echoKERNEL_CHECK_FILE is $(KERNEL_CHECK_FILE)

@echoPROFILE_KERNEL_VER is $(PROFILE_KERNEL_VER)

@cd$(INC_KERNEL_BASE); \

if[ ! -e $(KERNEL_DIR)/$(KERNEL_CHECK_FILE) ]; then \

echo "Untarring original Linux kernel source:$(LINUX_ZIP_FILE)"; \

(tar xkfpj $(LINUX_ZIP_FILE) 2> /dev/null || true); \

fi

$(GENDEFCONFIG_CMD)$(PROFILE_PATH) ${MAKEFLAGS}

cd$(KERNEL_DIR); \

cp-f $(KERNEL_DIR)/arch/mips/defconfig $(KERNEL_DIR)/.config; \

$(MAKE)oldconfig;

endef


上面的$(GENDEFCONFIG_CMD)$(PROFILE_PATH) ${MAKEFLAGS} 命令用來生成defconfig文件。

然后將defconfig拷貝為linux內核默認配置文件.config,然后編譯oldconfig目標即利用configKconfig生成內核宏。


再接著kernelbuild進入到linux內核目錄開始編譯linux內核vmlinux。具體如何編譯內核的過程這里就不詳細講述了,有興趣的可以查看專門講述linux內核編譯的說明。


以上就是我們講述的編譯流程的4



modbuild:

@echo"******************** Starting modbuild ********************";

cd$(KERNEL_DIR); $(MAKE) -j $(ACTUAL_MAX_JOBS) modules &&$(MAKE) modules_install

直接解釋了我們講述的編譯流程的5,編譯生成內核模塊.ko文件


userspace:sanity_check create_install data-model $(BCM_SWVERSION_FILE)kernellinks

@echo"MAKING USERSPACE"

$(MAKE)-j $(ACTUAL_MAX_JOBS) -C userspace


直接解釋了我們講述的編譯流程的 7,即編譯userspace目錄下的子目錄,生成各個應用程序


hosttools:

$(MAKE)-C $(HOSTTOOLS_DIR)


直接解釋了我們講述的編譯流程的 8


buildimage:kernelbuild libcreduction gen_credits

cd$(TARGETS_DIR); $(HOSTTOOLS_DIR)/fakeroot/fakeroot ./buildFS2

...


這里一系列的動作用來生成文件系統和版本,解釋了我們講述的編譯流程的 9


至此整個的編譯流程就講解完了。


總結

以上是生活随笔為你收集整理的Bcm96xx 系列芯片 SDK介绍(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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