国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Hi3559處理器Ubuntu系統(tǒng)適配

2022-05-09 01:05李博劉作龍錢(qián)軍琪呂民強(qiáng)蒲駿偉
中國(guó)新通信 2022年5期

李博 劉作龍 錢(qián)軍琪 呂民強(qiáng) 蒲駿偉

【摘要】? ? 本文介紹了海思Hi3559AV100處理器運(yùn)行Ubuntu Linux系統(tǒng)的適配過(guò)程,適配過(guò)程可分為內(nèi)核適配,根文件系統(tǒng)適配,系統(tǒng)固化三個(gè)步驟。在Hi3559AV100平臺(tái)中適配Ubuntu系統(tǒng),可以利用Ubuntu成熟的軟件生態(tài)提升系統(tǒng)配置的靈活性,滿(mǎn)足更多應(yīng)用場(chǎng)景的需求。

【關(guān)鍵詞】? ? Ubuntu Linux? ? Linux內(nèi)核? ? 根文件系統(tǒng)

引言:

隨著嵌入式硬件性能的不斷提升,采用arm64架構(gòu)的處理器已逐步可以滿(mǎn)足Linux發(fā)行版的基本運(yùn)行需求。部分Linux發(fā)行版如Ubuntu,也提供了arm64版本的系統(tǒng),本文詳細(xì)描述了在海思的Hi3559AV100處理器運(yùn)行Ubuntu系統(tǒng)的適配過(guò)程。在嵌入式平臺(tái)中使用Ubuntu,可以利用Ubuntu成熟的軟件包管理功能及豐富的軟件包資源,提升系統(tǒng)配置的靈活性,滿(mǎn)足更多應(yīng)用場(chǎng)景的需求。

一、硬件平臺(tái)

本文使用基于Hi3559AV100的開(kāi)發(fā)板作為硬件平臺(tái)進(jìn)行Ubuntu系統(tǒng)適配。Hi3559AV100是海思公司推出的專(zhuān)業(yè)的相機(jī)SOC,使用先進(jìn)低功耗工藝和架構(gòu)設(shè)計(jì),集成了雙核A73和雙核A53的大小核架構(gòu)[1]。A73和A53均為arm64架構(gòu)的處理器核心,可支持arm64架構(gòu)的Ubuntu系統(tǒng)運(yùn)行。

Hi3559AV100開(kāi)發(fā)板主要包括以下硬件資源:1. Hi3559AV100處理器一片;2. 4GB容量DDR4內(nèi)存;3. 8GB容量eMMC存儲(chǔ);4. 1個(gè)RS232調(diào)試串口;5. 1 個(gè)RJ45 網(wǎng)絡(luò)接口。

二、Ubuntu系統(tǒng)

Ubuntu Linux基于Debian Linux的unstable版本發(fā)展而來(lái),使用了debian系列的deb格式軟件包及apt軟件包管理工具。Ubuntu的出現(xiàn)提升了Linux發(fā)行版的易用性,造就了龐大的用戶(hù)群體及活躍的社區(qū),目前在桌面領(lǐng)域及服務(wù)器領(lǐng)域份額已成為L(zhǎng)inux發(fā)行版的領(lǐng)頭羊,在云計(jì)算等領(lǐng)域也提供了相應(yīng)的解決方案并得到了廣泛應(yīng)用。隨著ARM生態(tài)的不斷發(fā)展,arm64架構(gòu)的CPU在性能上已經(jīng)可以勝任Ubuntu發(fā)行版的運(yùn)行需求,目前許多arm64架構(gòu)的處理器廠商都已經(jīng)為其開(kāi)發(fā)板提供了官方的Ubuntu的適配,例如,Xilinx公司的Ultrascale+開(kāi)發(fā)板以及著名的樹(shù)莓派平臺(tái)均為開(kāi)發(fā)者提供了預(yù)裝的Ubuntu系統(tǒng)。Ubuntu也提供了其各主要版本的arm64系統(tǒng)下載鏈接。arm64架構(gòu)下,Ubuntu僅提供其根文件系統(tǒng),Linux內(nèi)核由用戶(hù)針對(duì)其具體處理器及板級(jí)進(jìn)行適配。本文描述針對(duì)Hi3559AV100處理器適配arm64版本的Ubuntu16.04系統(tǒng)。

三、適配過(guò)程

海思官方提供Hi3559AV100開(kāi)發(fā)SDK,其中包含適配Hi3559AV100開(kāi)發(fā)板的u-boot、Linux內(nèi)核、根文件系統(tǒng)及開(kāi)發(fā)用的軟件框架和實(shí)例程序。SDK中,Linux內(nèi)核的默認(rèn)配置可支持SDK中的根文件系統(tǒng),但無(wú)法支持Ubuntu系統(tǒng)的運(yùn)行,因此需要修改內(nèi)核配置,編譯,生成支持Ubuntu的內(nèi)核鏡像。得到可支持Ubuntu系統(tǒng)啟動(dòng)的內(nèi)核鏡像后,可進(jìn)一步修改根文件系統(tǒng),滿(mǎn)足使用需求,并生成固化用的文件系統(tǒng)鏡像,并最終固化至開(kāi)發(fā)板,完成適配過(guò)程。

(一)環(huán)境準(zhǔn)備

適配前需搭建如圖1所示的開(kāi)發(fā)環(huán)境,開(kāi)發(fā)主機(jī)環(huán)境為一臺(tái)安裝Ubuntu系統(tǒng)的PC機(jī),按照文檔[2]安裝SDK并搭建了完整的開(kāi)發(fā)環(huán)境,建立了有效的tftp服務(wù)器及NFS服務(wù)器環(huán)境。從Ubuntu下載鏈接下載的Ubuntu16.04系統(tǒng)的arm64版本壓縮包解壓至開(kāi)發(fā)主機(jī)環(huán)境的NFS路徑下。開(kāi)發(fā)板和開(kāi)發(fā)主機(jī)通過(guò)以太網(wǎng)和串口連接,在開(kāi)發(fā)調(diào)試階段,開(kāi)發(fā)板上運(yùn)行Linux內(nèi)核存儲(chǔ)在開(kāi)發(fā)主機(jī)端的tftp目錄中,通過(guò)網(wǎng)絡(luò)文件系統(tǒng)NFS掛載存儲(chǔ)于開(kāi)發(fā)主機(jī)端NFS目錄中的Ubuntu系統(tǒng)。

(二)內(nèi)核適配

通過(guò)實(shí)際測(cè)試,SDK安裝完成后,其內(nèi)核版本為4.9,默認(rèn)的配置不支持Ubuntu系統(tǒng)的啟動(dòng),需修改內(nèi)核配置,在Linux內(nèi)核源碼路徑下輸入如下命令打開(kāi)Linux內(nèi)核配置操作界面:

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- menuconfig

在調(diào)試階段,Ubuntu系統(tǒng)部署在了開(kāi)發(fā)機(jī)中,Hi3559開(kāi)發(fā)板需通過(guò)NFS掛載根文件系統(tǒng),默認(rèn)的內(nèi)核配置不支持根文件系統(tǒng)的NFS的方式掛載,因此首先配置內(nèi)核的網(wǎng)絡(luò)部分和文件系統(tǒng)部分,開(kāi)啟內(nèi)核對(duì)根文件系統(tǒng)的NFS的方式掛載的支持,如圖2、圖3所示。

SDK中根文件系統(tǒng)中設(shè)置了基本的設(shè)備節(jié)點(diǎn),確保了啟動(dòng)時(shí)/dev路徑下具備基本的設(shè)備節(jié)點(diǎn)。Ubuntu使用udev機(jī)制,因而Ubuntu中/dev路徑默認(rèn)為空,為保證系統(tǒng)啟動(dòng)時(shí)具備基本的設(shè)備節(jié)點(diǎn),需配置內(nèi)核中的/dev/tmpfs選項(xiàng),使得內(nèi)核啟動(dòng)后自行創(chuàng)建基本的/dev下的設(shè)備節(jié)點(diǎn),如圖4所示。

Linux系統(tǒng)中,根文件系統(tǒng)掛載后,內(nèi)核在根文件系統(tǒng)中尋找并執(zhí)行init程序,開(kāi)啟系統(tǒng)的初始化,SDK提供的根文件系統(tǒng)使用的是Sysvinit,而Ubuntu使用了功能更為強(qiáng)大的systemd,systemd需要使用內(nèi)核的cgroups機(jī)制,因此需配置內(nèi)核中cgroups相關(guān)選項(xiàng),如圖5,圖6所示。

配置完成后,保存配置并退出,使用如下命令編譯Linux內(nèi)核:

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- uImage

編譯完成后就生成了內(nèi)核文件uImage,Hi3559平臺(tái)下,要獲得可從u-boot引導(dǎo)啟動(dòng)的Linux內(nèi)核文件,還需使用SDK中的arm-trusted-firmware工具生成ATF+Kernel的鏡像文件fip.bin,該鏡像文件fip.bin可被Hi3559的u-boot正確啟動(dòng)。

編譯內(nèi)核后還需編譯內(nèi)核模塊并安裝至NFS路徑下的Ubuntu文件系統(tǒng)中:

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- modules

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux-? \

INSTALL_MOD_PATH=/nfs/ubuntu? modules_install

編譯內(nèi)核后還需編譯內(nèi)核模塊并安裝后,NFS路徑中的Ubuntu系統(tǒng)可正確被內(nèi)核啟動(dòng)掛載,由于內(nèi)核模塊安裝時(shí)自動(dòng)設(shè)置了依賴(lài)關(guān)系,因此啟動(dòng)后內(nèi)核模塊將你被系統(tǒng)自動(dòng)加載。

(三)根文件系統(tǒng)適配

目標(biāo)機(jī)通過(guò)NFS網(wǎng)絡(luò)文件系統(tǒng)掛載運(yùn)行Ubuntu系統(tǒng),由于Ubuntu系統(tǒng)功能眾多,較為龐大,因此本文采用Ubuntu提供的最小化的base[3]系統(tǒng)作為Hi3559AV100適配Ubuntu的基礎(chǔ)根文件系統(tǒng)。Ubuntu base僅提供了最小化的系統(tǒng)能力,其他功能可通過(guò)聯(lián)網(wǎng)安裝獲取,因此需在開(kāi)發(fā)環(huán)境中對(duì)Ubuntu根文件系統(tǒng)進(jìn)行基礎(chǔ)設(shè)置,通過(guò)拷貝開(kāi)發(fā)環(huán)境主機(jī)Ubuntu中的配置文件來(lái)更換NFS中Ubuntu系統(tǒng)的軟件源配置,用戶(hù)名密碼配置等,隨后即可啟動(dòng)系統(tǒng)。在系統(tǒng)正常啟動(dòng)后,使用軟件包管理工具apt安裝所需的軟件滿(mǎn)足實(shí)際使用需求,如net-tools,kmod等,如需編譯器可安裝gcc,g++等。

在開(kāi)發(fā)板上啟動(dòng)配置好的內(nèi)核,通過(guò)NFS掛載Ubuntu系統(tǒng),步驟如下:

1.啟動(dòng)開(kāi)發(fā)板,在u-boot出現(xiàn)shell提示符時(shí)在串口終端輸入任意按鍵,打斷默認(rèn)啟動(dòng),修改啟動(dòng)參數(shù)如下:

setenv bootargs “mem=2048M console=ttyAMA0,115200 noinitrd root=/dev/nfs rw \

nfsroot=192.168.0.100:/nfs/ubuntu,proto=tcp,nfsvers=3,nolock \

ip=192.168.0.120:192.168.0.100:192.168.0.1:255.255.255.0 \

blkdevparts=mmcblk0:1M(u-boot.bin),15M(kernel),7000M(rootfs)”

setenv bootcmd ”tftp 41000000 fip.bin;bootm 41000000”

按照上述命令設(shè)置bootargs參數(shù),可配置內(nèi)核啟動(dòng)時(shí)以NFS的方式掛載根文件系統(tǒng),根文件系統(tǒng)位于ip地址為192.168.0.100的主機(jī)的/nfs/ubuntu路徑下,并指定了開(kāi)發(fā)板的ip地址為192.168.0.120。設(shè)置blkdevparts的目的在于告訴內(nèi)核開(kāi)發(fā)板的emmc芯片分區(qū)按照1M,15M,7000M劃分為3個(gè)分區(qū)。

2.在u-boot的shell中輸入boot命令,u-boot將根據(jù)配置先從tftp加載fip.bin文件至內(nèi)存的0x4100000地址,隨后從0x41000000地址啟動(dòng)Linux內(nèi)核。

3. Linux內(nèi)核啟動(dòng)后將按照bootargs的設(shè)置,掛載NFS中的Ubuntu根文件系統(tǒng),掛載成功后,Ubuntu中的systemd啟動(dòng),初始化系統(tǒng),當(dāng)出現(xiàn)登陸提示符時(shí),代表Ubuntu啟動(dòng)完成。

Ubuntu系統(tǒng)啟動(dòng)完成后,可以使用先前配置的用戶(hù)名及密碼登錄系統(tǒng),并使用apt工具安裝需要的軟件包,并進(jìn)行相應(yīng)的系統(tǒng)功能測(cè)試,系統(tǒng)功能可滿(mǎn)足需求則根文件系統(tǒng)適配完成。

(四)系統(tǒng)固化

系統(tǒng)固化指將內(nèi)核鏡像及Ubuntu根文件系統(tǒng)部署至開(kāi)發(fā)板的emmc芯片內(nèi),可以脫離開(kāi)發(fā)環(huán)境的tftp+NFS啟動(dòng)系統(tǒng)的過(guò)程。

存放在開(kāi)發(fā)環(huán)境主機(jī)中NFS路徑下的Ubuntu根文件系統(tǒng),可在主機(jī)端使用Linux中的tar工具進(jìn)行打包,隨后燒寫(xiě)至eMMC 分區(qū)中。燒寫(xiě)固化流程如下:

1.啟動(dòng)開(kāi)發(fā)板,在u-boot出現(xiàn)提示符時(shí)在串口終端輸入,打斷默認(rèn)啟動(dòng),隨后在u-boot的shell中執(zhí)行如下命令:

mw.b 0x42000000 0xff 0xf00000

tftp 0x42000000 fip.bin

mmc write 0 0x42000000 0x800 0x7800

將Linux內(nèi)核鏡像文件下載至0x42000000,并燒寫(xiě)如emmc中。

2.固化文件系統(tǒng),在燒寫(xiě)內(nèi)核完成后,通過(guò)燒入的內(nèi)核鏡像文件啟動(dòng),此時(shí)仍需掛載NFS,設(shè)置參數(shù)如下:

setenv bootargs “mem=2048M console=ttyAMA0,115200 noinitrd root=/dev/nfs rw \

nfsroot=192.168.0.100:/nfs/ubuntu,proto=tcp,nfsvers=3,nolock \

ip=192.168.0.120:192.168.0.100:192.168.0.1:255.255.255.0 \

blkdevparts=mmcblk0:1M(u-boot.bin),15M(kernel),7000M(rootfs)”

setenv bootcmd ”mmc read 0 41000000; bootm 41000000”

隨后輸入boot啟動(dòng)系統(tǒng)。系統(tǒng)啟動(dòng)后先格式化emmc的第三分區(qū):

mkfs.ext4? /dev/mmcblk01p3

格式化后掛載該分區(qū)至/mnt路徑:

mount /dev/mmcblk01p3 /mnt

隨后將使用tar命令打包的Ubuntu系統(tǒng)解壓至/mnt路徑

tar xvf ubuntu.tar -C /mnt

解壓完成后,使用sync命令,確保文件寫(xiě)入emmc中,至此根文件系統(tǒng)燒寫(xiě)部署完成,可重啟開(kāi)發(fā)板,設(shè)置啟動(dòng)參數(shù)。

3.設(shè)置啟動(dòng)參數(shù)。重啟開(kāi)發(fā)板,在u-boot出現(xiàn)shell提示符時(shí)在串口終端輸入任意按鍵,打斷默認(rèn)啟動(dòng),修改啟動(dòng)參數(shù)如下:

setenv bootargs “mem=2048M console=ttyAMA0, 115200 noinitrd root=/dev/mmcblk01p3 \

rootfstype=ext4 rw ip=192.168.0.120 blkdevparts=mmcblk0:1M(u-boot.bin),15M(kernel), \

7000M(rootfs)”

setenv bootcmd ”mmc read 0 41000000; bootm 41000000”

隨后輸入saveenv保存設(shè)置,至此系統(tǒng)固化完成,重新啟動(dòng)開(kāi)發(fā)板后,將自動(dòng)從emmc中加載Linux內(nèi)核鏡像,并啟動(dòng)emmc中的Ubuntu系統(tǒng)。與傳統(tǒng)嵌入式Linux難以靈活擴(kuò)展功能不同,Linux發(fā)行版系統(tǒng)以軟件源的方式提供了豐富的軟件生態(tài),系統(tǒng)啟動(dòng)并登陸后,可以使用apt工具依據(jù)實(shí)際需求,安裝需要的軟件組件,支持豐富的應(yīng)用場(chǎng)景。

四、結(jié)束語(yǔ)

本文指出了Linux發(fā)行版Ubuntu應(yīng)用于嵌入式環(huán)境的方法,并在Hi3559開(kāi)發(fā)板進(jìn)行了驗(yàn)證。隨著嵌入式硬件平臺(tái)性能的不斷提升,Linux發(fā)行版作為使用廣泛,便于擴(kuò)展定制的基礎(chǔ)系統(tǒng)平臺(tái)必將更加廣泛的應(yīng)用與嵌入式場(chǎng)景,為嵌入式開(kāi)發(fā)者提供更好的系統(tǒng)通用性、靈活性,更適用于未來(lái)物聯(lián)網(wǎng)行業(yè)的開(kāi)發(fā)及部署,提升應(yīng)用的開(kāi)發(fā)效率,縮短研發(fā)周期,使嵌入式產(chǎn)品更具競(jìng)爭(zhēng)力。

參? 考? 文? 獻(xiàn)

[1] Hi3559A/C V100用戶(hù)指南

[2] Hi3559A/C V100開(kāi)發(fā)環(huán)境用戶(hù)指南

[3] https://wiki.ubuntu.com/Base

李博(1988.06-),男,漢族,陜西銅川,碩士研究生,工程師,研究方向:Linux操作系統(tǒng)。