最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

STM32MP157 Linux系統(tǒng)移植開發(fā)篇1:linux系統(tǒng)移植前說明及源碼編譯

2021-08-02 11:54 作者:華清遠見研發(fā)中心  | 我要投稿


本文章為《STM32MP157 Linux系統(tǒng)移植開發(fā)篇》系列中的一篇,筆者使用的開發(fā)平臺為華清遠見FS-MP1A開發(fā)板(STM32MP157開發(fā)板)。stm32mp157是ARM雙核,2個A7核,1個M4核,A7核上可以跑Linux操作系統(tǒng),M4核上可以跑FreeRTOS、RT-Thread等實時操作系統(tǒng),STM32MP157開發(fā)板所以既可以學嵌入式linux,也可以學stm32單片機。

針對FS-MP1A開發(fā)板,除了Linux系統(tǒng)移植篇外,還包括其他多系列教程,包括Cortex-A7開發(fā)篇、Cortex-M4開發(fā)篇、擴展板驅(qū)動移植篇、Linux應(yīng)用開發(fā)篇、FreeRTOS系統(tǒng)移植篇、Linux驅(qū)動開發(fā)篇、硬件設(shè)計篇、人工智能機器視覺篇、Qt應(yīng)用編程篇、Qt綜合項目實戰(zhàn)篇等。歡迎關(guān)注,更多stm32mp157開發(fā)教程及視頻,可加技術(shù)交流Q群459754978,感謝關(guān)注。

關(guān)于FS-MP1A開發(fā)板:
手機淘寶分享碼:復制本行文字打開手淘?T4FPXn3YYJ2?
鏈接:https://item.taobao.com/item.htm?id=622457259672


系統(tǒng)移植前說明

關(guān)于命令行提示符

在實驗步驟中會涉及到執(zhí)行命令的操作,為區(qū)分操作是在Ubuntu上完成還是在開發(fā)板上完成,不同操作會有不同的提示符:

Ubuntu操作時命令行提示符為:linux@ubuntu:$?

開發(fā)板Linux系統(tǒng)下操作時命令行提示符為:root@fsmp1a:$

開發(fā)板u-boot期間操作是命令行提示符為:STM32MP>

注意:由于部分操作需要進入特定目錄下完成,導致命令行提示符較長如:

linux@ubuntu:~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0/u-boot-stm32mp-2020.01$

過長的命令行提示符不便于文檔編寫,所以本文中所有命令行提示符均忽略了當前工作目錄的顯示,命令行提示符不代表當前目錄,具體當前操作是在哪個目錄下完成,請結(jié)合文檔上下文確定。

?

第 1 章?源碼編譯

1.1?編譯環(huán)境配置

1.1.1?源碼目錄結(jié)構(gòu)

由于OpenSTLinux所涉及到的源碼較多,且有路徑的依賴。所以請按照本文的說明建立源碼文件夾。

在用戶home目錄下建立fs-mp1a文件夾。

linux@ubuntu: $ cd ~

linux@ubuntu: $ mkdir fs-mp1a

將工作目錄切換到fs-mp1a目錄下,建立linux、optee-os、trusted-firmware、u-boot、tools文件夾

linux@ubuntu: $ cd ~/fs-mp1a

linux@ubuntu: $ mkdir linux optee-os trusted-firmware u-boot tools

?


請務(wù)必按照此目錄名稱建立文件夾,否則會導致后續(xù)的OpenSTLinux系統(tǒng)編譯錯誤。

1.1.2?SDK工具鏈安裝

OpenSTLinux SDK是Yocto SDK定制發(fā)行版的軟件開發(fā)套件,它提供了獨立的交叉開發(fā)工具鏈和針對特定鏡像中所使用到的特定鏈接庫。

開發(fā)資料光盤中提供的SDK是基于FS-MP1A開發(fā)板的定制交叉編譯工具鏈,該工具鏈可用于FS-MP1A開發(fā)板中所有項目的編譯與調(diào)試。

將資料光盤下【華清遠見-FS-MP1A開發(fā)資料\01-工具軟件】的en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz復制到ubuntu主機中,可以采用共享文件夾的方式也可以使用tfp方式將文件存入FS-MP1A源碼目錄下的tools文件夾下進行解壓。

linux@ubuntu: $ tar -xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar.xz ?-C ?/home/linux/fs-mp1a/tools/

解壓之后得到sdk目錄,進入到sdk文件夾之后內(nèi)容如下。

?


執(zhí)行st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh安裝腳本。

linux@ubuntu: $ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh

運行之后會提示輸入安裝位置,直接按回車鍵默認即可:


?

繼續(xù)詢問是否安裝SDK,輸入Y,回車

?

默認安裝路徑安裝在opt目錄下,這個目錄需要有root權(quán)限,所以安裝時需要使用sudo?安裝,過程中需要輸入用戶的sudo密碼(如果當前用戶sudo功能已經(jīng)授權(quán),這個密碼就是用戶的登錄密碼),輸入密碼后開始進行安裝。


?

輸入密碼后等待安裝,安裝后顯示如下:



?

導入sdk

linux@ubuntu: $ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

驗證開發(fā)工具是否安裝正確,顯示版本信息如下圖所示。

linux@ubuntu: $ $CC --version


?

1.1.3?源碼導入

l?Bootloader源碼

將光盤資料中【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\05-預(yù)裝系統(tǒng)源碼\u-boot】下的u-boot-fsmp1a-2020.01.tar.xz和Makefile.sdk導入到fs-mp1a目錄下u-boot文件夾中


?

將u-boot-fsmp1a-2020.01.tar.xz解壓之后得到u-boot-fsmp1a-2020.01文件夾

linux@ubuntu:$ tar -xvf u-boot-fsmp1a-2020.01.tar.xz

?


l?trusted-firmware源碼

將光盤資料中【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\05-預(yù)裝系統(tǒng)源碼\tf-a】下的fsmp1a-trusted-firmware-2.2.tar.xzMakefile.sdk導入到fs-mp1a目錄下trusted-firmware文件夾中

?


將fsmp1a-trusted-firmware-2.2.tar.xz解壓之后得到fsmp1a-trusted-firmware-2.2文件夾

linux@ubuntu:$ tar -xvf fsmp1a-trusted-firmware-2.2.tar.xz


?

l?optee_os源碼

將光盤資料中【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\05-預(yù)裝系統(tǒng)源碼\optee】下的fsmp1a-optee_os-3.9.0.tar.xz和Makefile.sdk導入到fs-mp1a目錄下optee-os文件夾中

?


將fsmp1a-optee_os-3.9.0.tar.xz解壓之后得到fsmp1a-optee_os-3.9.0文件夾

linux@ubuntu:$ tar -xvf fsmp1a-optee_os-3.9.0.tar.xz

?


l?linux源碼

??盤資料中【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\05-預(yù)裝系統(tǒng)源碼\linux】下的fsmp1a-linux-5.4.31.tar.xz導入到fs-mp1a目錄下linux文件夾中

?


將fsmp1a-linux-5.4.31.tar.xz解壓之后得到fsmp1a-linux-5.4.31文件夾

linux@ubuntu:$ tar -xvf fsmp1a-linux-5.4.31.tar.xz


?

l?Yocto源碼

盤資料中【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\05-預(yù)裝系統(tǒng)源碼\Yocto】下的fsmp1a-ST-Yocto.tar.xz導入到fs-mp1a目錄下


?

將fsmp1a-ST-Yocto.tar.xz解壓之后得到fsmp1a-ST-Yocto文件夾

linux@ubuntu:$ tar -xvf fsmp1a-ST-Yocto.tar.xz

?


盤資料中【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\05-預(yù)裝系統(tǒng)源碼\Yocto】下的downloads.tar.xz導入到由fsmp1a-ST-Yocto.tar.xz得到的fsmp1a-ST-Yocto文件夾下。


?

將downloads.tar.xz解壓之后得到downloads文件夾。

linux@ubuntu:$ tar -xvf downloads.tar.xz


?

至此OpenSTLinux全部源碼就導入完成了。導入源碼完成后的fs-mp1a目錄結(jié)構(gòu)如下。


?

1.2?u-boot源碼編譯

1)?導入交叉編譯工具鏈并驗證

linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$?$CC --version

?


2)?將工作目錄切換到u-boot-fsmp1a-2020.01源碼目錄下。

linux@ubuntu:$ cd ${HOME}/fs-mp1a/u-boot/u-boot-fsmp1a-2020.01

?


3)?導入配置文件。

fsmp1a的u-boot可以支持basic、trusted、optee三種配置。分別對應(yīng)三種配置文件。

?


這里使用trusted配置來編譯

linux@ubuntu:$ make stm32mp15_trusted_defconfig

?


4)?編譯源碼

linux@ubuntu:$ make DEVICE_TREE=stm32mp157a-fsmp1a all

編譯完成后得到u-boot.img文件

?


l?使用Makefile.sdk編譯

除了傳統(tǒng)的編譯方式之外還可以通過上層目錄下的Makefile.sdk來編譯鏡像。使用此方法需要將先前編譯過的源碼清除后再編譯,否則會導致編譯出錯。

linux@ubuntu:$ make distclean

l?編譯basic鏡像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_basic_defconfig,basic,u-boot.img

編譯成功后會在上級目錄下生成build-basic目錄。其中的u-boot-stm32mp157a-fsmp1a-basic.img和u-boot-spl.stm32-stm32mp157a-fsmp1a-basic即為生成的燒寫鏡像


?

l?編譯trusted鏡像

linux@ubuntu:$?make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,trusted,u-boot.stm32

編譯成功后會在上級目錄下生成build-trusted目錄。其中的u-boot-stm32mp157a-fsmp1a-trusted.stm32即為生成的燒寫鏡像

?


l?編譯optee鏡像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk all UBOOT_CONFIGS=stm32mp15_fsmp1a_trusted_defconfig,optee,u-boot.stm32

編譯成功后會在上級目錄下生成build-optee目錄。其中的u-boot-stm32mp157a-fsmp1a-optee.stm32即為生成的燒寫鏡像

?


l?編譯basic、trusted、optee三種鏡像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk all

編譯成功后會在上級目錄下會同時生成build-basic、build-trusted、build-optee三個目錄。

?


1.3?tf-a源碼編譯

1)?導入交叉編譯工具鏈并驗證

linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

?


2)?將工作目錄切換到fsmp1a-trusted-firmware-2.2源碼目錄下。

linux@ubuntu:$ cd ${HOME}/fs-mp1a/trusted-firmware/fsmp1a-trusted-firmware-2.2

l?編譯trusted鏡像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all

編譯成功之后會在上級目錄下生成build目錄,build目錄下的trusted目錄中tf-a-stm32mp157a-fsmp1a-trusted.stm32即為燒寫鏡像。

?


l?編譯optee鏡像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=optee ELF_DEBUG_ENABLE='1' all

編譯成功之后會在上級目錄下生成build目錄,build目錄下的optee目錄中tf-a-stm32mp157a-fsmp1a-optee.stm32即為燒寫鏡像。

?


l?編譯trusted、optee兩種鏡像

linux@ubuntu:$ make -f $PWD/../Makefile.sdk all

編譯成功后會在上級目錄下生成build目錄,該目錄下同時生成了trusted和optee兩個目錄。


?

1.4?optee-os源碼編譯

1)?導入交叉編譯工具鏈并驗證

linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

?



2)?將工作目錄切換到fsmp1a-optee_os-3.9.0源碼目錄下。

linux@ubuntu:$ cd ${HOME}/fs-mp1a/optee-os/fsmp1a-optee_os-3.9.0


3)?編譯源碼

linux@ubuntu:$ make -f $PWD/../Makefile.sdk CFG_EMBED_DTB_SOURCE_FILE=stm32mp157a-fsmp1a

編譯成功之后會在上級目錄下生成build目錄其目錄下的tee-header_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32、tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32即為燒寫鏡像。

?


1.5?linux源碼編譯

1)?導入交叉編譯工具鏈并驗證

linux@ubuntu:$ linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

linux@ubuntu:$ $CC --version

?


2)?將工作目錄切換到fsmp1a-linux-5.4.31源碼目錄下。

linux@ubuntu:$?cd ${HOME}/fs-mp1a/linux/fsmp1a-linux-5.4.31

?


3)?導入配置文件

linux@ubuntu:$?make stm32_fsmp1a_defconfig

?


如果需要修改配置可以使用如下命令來啟動menuconfig

linux@ubuntu:$?make menuconfig


?

4)?編譯內(nèi)核鏡像

linux@ubuntu:$?make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040

編譯成功之后會在arch/arm/boot/目錄下生成uImage文件

?


在源碼目錄下生成用于調(diào)試的vmlinux文件

?


5)?編譯設(shè)備樹文件

linux@ubuntu:$?make ARCH=arm dtbs

編譯成功之后會在arch/arm/boot/dts目錄下生成stm32mp157a-fsmp1a.dtb、stm32mp157a-fsmp1a-rgb070.dtb和stm32mp157a-fsmp1a-mipi050.dtb文件

?


stm32mp157a-fsmp1a-rgb070.dtb為rgb屏幕的設(shè)備樹文件

stm32mp157a-fsmp1a-mipi050.dtb為mipi屏幕的設(shè)備樹文件

6)?編譯內(nèi)核模塊

linux@ubuntu:$?make ARCH=arm modules

linux@ubuntu:$?make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install

編譯成功后會在上層目錄生成build目錄其中的install_artifact?目錄中存放的即為導出的驅(qū)動模塊。

1.6?Yocto構(gòu)建系統(tǒng)

1)?將工作目錄切換到fsmp1a-ST-Yocto源碼目錄下。

linux@ubuntu:$?cd ${HOME}/fs-mp1a/ fsmp1a-ST-Yocto


?

2)?導入編譯配置

linux@ubuntu:$?DISTRO=openstlinux-weston MACHINE=fsmp1a source layers/meta-farsight/scripts/envsetup.sh

如下界面提示主機的ubuntu版本與期望的版本不同,這里輸入y

?


如果是第一次配置,需要同意一些協(xié)議,輸入y。。

?


之后按空格鍵到協(xié)議底部

?


輸入y會出現(xiàn)如下界面

?


3)?編譯源碼

linux@ubuntu:$?bitbake fs-mp1a-weston

注意:在編譯Yocto系統(tǒng)時確保ubuntu主機可以連接互聯(lián)網(wǎng)

由于OpenSTLinux涉及到的源碼較多,因此編譯會比較耗時。

編譯完成后所生成的鏡像文件保存在tmp-glibc/deploy/images/fsmp1a/目錄下。

?

這里生成了fs-mp1a開發(fā)板所需的燒寫鏡像,包括basic、trusted、optee三種。

l?basic專有鏡像

u-boot-spl.stm32-stm32mp157a-fsmp1a-basic

u-boot-stm32mp157a-fsmp1a-basic.img

l?trusted專有鏡像

tf-a-stm32mp157a-fsmp1a-trusted.stm32

u-boot-stm32mp157a-fsmp1a-trusted.stm32

l?optee專有鏡像

tf-a-stm32mp157a-fsmp1a-optee.stm32

u-boot-stm32mp157a-fsmp1a-optee.stm32

tee-header_v2-stm32mp157a-fsmp1a-optee.stm32

tee-pageable_v2-stm32mp157a-fsmp1a-optee.stm32

tee-pager_v2-stm32mp157a-fsmp1a-optee.stm32

l?公用鏡像

st-image-bootfs-openstlinux-weston-fsmp1a.ext4

st-image-userfs-openstlinux-weston-fsmp1a.ext4

st-image-vendorfs-openstlinux-weston-fsmp1a.ext4

fs-mp1a-weston-openstlinux-weston-fsmp1a.ext4

l?配置文件

flashlayout_fs-mp1a-weston文件夾中存放的是燒寫時所使用的配置文件

?

由上圖可以看到配置文件分為sdcard燒寫配置和emmc燒寫配置。


STM32MP157 Linux系統(tǒng)移植開發(fā)篇1:linux系統(tǒng)移植前說明及源碼編譯的評論 (共 條)

分享到微博請遵守國家法律
长葛市| 林甸县| 紫阳县| 千阳县| 新昌县| 普陀区| 商都县| 贵州省| 淅川县| 塔河县| 安庆市| 霍山县| 葵青区| 丰镇市| 十堰市| 凉城县| 山东省| 天峻县| 于田县| 板桥市| 日土县| 博兴县| 鄂温| 永寿县| 宁阳县| 即墨市| 庄河市| 织金县| 洮南市| 洞口县| 布尔津县| 精河县| 双柏县| 泉州市| 日土县| 永德县| 霍州市| 青州市| 大邑县| 唐海县| 克东县|