溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Ubuntu上hi3531交叉編譯環(huán)境arm-hisiv100nptl-linux怎么搭建

發(fā)布時間:2021-10-26 11:44:30 來源:億速云 閱讀:200 作者:小新 欄目:建站服務(wù)器

小編給大家分享一下Ubuntu上hi3531交叉編譯環(huán)境arm-hisiv100nptl-linux怎么搭建,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

安裝SDK

1、Hi3531 SDK包位置

在"Hi3531_V100R001***/01.software/board"目錄下,您可以看到一個 Hi3531_SDK_Vx.x.x.x.tgz 的文件,

該文件就是Hi3531的軟件開發(fā)包。

2、解壓縮SDK包

在linux服務(wù)器上(或者一臺裝有l(wèi)inux的PC上,主流的linux發(fā)行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz ,

解壓縮該文件,可以得到一個Hi3531_SDK_Vx.x.x.x目錄。

3、展開SDK包內(nèi)容

返回Hi3531_SDK_Vx.x.x.x目錄,運行./sdk.unpack(請用root或sudo權(quán)限執(zhí)行)將會展開SDK包打包壓縮存放的內(nèi)容,請按照提示完成操作。

如果您需要通過WINDOWS操作系統(tǒng)中轉(zhuǎn)拷貝SDK包,請先運行./sdk.cleanup,收起SDK包的內(nèi)容,拷貝到新的目錄后再展開。

4、在linux服務(wù)器上安裝交叉編譯器

1)安裝uclibc交叉編譯器(注意,需要有sudo權(quán)限或者root權(quán)限):

進入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100-linux目錄,運行chmod +x cross.install,然后運行./cross.install即可。

2) 安裝glibc交叉編譯器(注意,需要有sudo權(quán)限或者root權(quán)限):

進入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux目錄,運行chmod +x cross.install,然后運行./cross.install即可。

3) 執(zhí)行source /etc/profile, 安裝交叉編譯器的腳本配置的環(huán)境變量就可以生效了,或者請重新登陸也可。也可以source /etc/bash.bashrc。

在終端上輸入命令 arm-linux 再按Tab鍵,可以看到下圖,說明環(huán)境變量設(shè)置成功了

ls@ubuntu:/slq/nfs/mpp$ arm-hisiv100nptl-linux-

arm-hisiv100nptl-linux-addr2line arm-hisiv100nptl-linux-gprof

arm-hisiv100nptl-linux-ar arm-hisiv100nptl-linux-ld

arm-hisiv100nptl-linux-as arm-hisiv100nptl-linux-nm

arm-hisiv100nptl-linux-c++ arm-hisiv100nptl-linux-objcopy

arm-hisiv100nptl-linux-c++filt arm-hisiv100nptl-linux-objdump

arm-hisiv100nptl-linux-cpp arm-hisiv100nptl-linux-ranlib

arm-hisiv100nptl-linux-g++ arm-hisiv100nptl-linux-readelf

arm-hisiv100nptl-linux-gcc arm-hisiv100nptl-linux-size

arm-hisiv100nptl-linux-gcc-4.4.1 arm-hisiv100nptl-linux-strings

arm-hisiv100nptl-linux-gccbug arm-hisiv100nptl-linux-strip

arm-hisiv100nptl-linux-gcov

驗證,編譯一個hello.c文件

#include

int main()

{

printf("hello world!\n");

}

使用命令:arm-hisiv100nptl-linux-gcc hello.c -o hello 看是否編譯成功

root@ubuntu:/slq/test# ls

hello hello.c

可見成功生成了二進制文件。

5、編譯osdrv

1.osdrv使用說明

本目錄設(shè)計思路為一套源代碼支持兩種工具鏈編譯,因此需要通過編譯參數(shù)指定不同的工具鏈。其中arm-hisiv100nptl-linux是uclibc工具鏈,arm-hisiv200-linux是glibc工具鏈。具體命令如下

(1)編譯整個osdrv目錄:

make OSDRV_CROSS=arm-hisiv100nptl-linux all

或者

make OSDRV_CROSS=arm-hisiv200-linux all

(2)清除整個osdrv目錄的編譯文件:

make OSDRV_CROSS=arm-hisiv100nptl-linux clean

或者

make OSDRV_CROSS=arm-hisiv200-linux clean

(3)徹底清除整個osdrv目錄的編譯文件,除清除編譯文件外,還刪除已編譯好的鏡像:

make OSDRV_CROSS=arm-hisiv100nptl-linux distclean

或者

make OSDRV_CROSS=arm-hisiv200-linux distclean

(4)單獨編譯kernel:

待進入內(nèi)核源代碼目錄后,執(zhí)行以下操作

cp arch/arm/configs/godnet_defconfig .config

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage

或者

cp arch/arm/configs/godnet_defconfig .config

make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- menuconfig

make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage

(5)單獨編譯uboot:

待進入boot源代碼目錄后,執(zhí)行以下操作

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- godnet_config

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux-

或者

make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- godnet_config

make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux-

(6)制作文件系統(tǒng)鏡像:

在osdrv/pub/中有已經(jīng)編譯好的文件系統(tǒng),因此無需再重復(fù)編譯文件系統(tǒng),只需要根據(jù)單板上flash的規(guī)格型號制作文件系統(tǒng)鏡像即可。

spi flash使用jffs2格式的鏡像,制作jffs2鏡像時,需要用到spi flash的塊大小。這些信息會在uboot啟動時會打印出來。建議使用時先直接運行mkfs.jffs2工具,根據(jù)打印信息填寫相關(guān)參數(shù)。下面以塊大小為64KB為例:

osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x40000 -o osdrv/pub/rootfs_uclibc_256k.jffs2

osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2

sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 --pad=0x9A0000 -o osdrv/pub/rootfs_uclibc_64k.jffs2

sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc_slq -l -e 0x10000 --pad=0x9A0000 -o osdrv/pub/rootfs_uclibc_64k_slq.jffs2

sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_custom_slq -l -e 0x10000 --pad=0x100000 -o osdrv/pub/rootfs_custom_64k_slq.jffs2

或者

osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_glibc -l -e 0x40000 -o osdrv/pub/rootfs_glibc_256k.jffs2

nand flash使用yaffs2格式的鏡像,制作yaffs2鏡像時,需要用到nand flash的pagesize和ecc。這些信息會在uboot啟動時會打印出來。建議使用時先直接運行mkyaffs2image工具,根據(jù)打印信息填寫相關(guān)參數(shù)。下面以2KB pagesize、1bit ecc為例:

osdrv/pub/bin/pc/mkyaffs2image osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_1bit.yaffs2 1 1

或者

osdrv/pub/bin/pc/mkyaffs2image osdrv/pub/rootfs_glibc osdrv/pub/rootfs_glibc_2k_1bit.yaffs2 1 1

(7)單獨編譯PCIE MCC驅(qū)動模塊:

首先,先準備好編譯模塊時需要連接到的內(nèi)核源代碼目錄:

cd ./kernel/

tar -xvf linux-3.0.y.tgz

解壓內(nèi)核源代碼之后,需要根據(jù)具體的芯片類型,先編譯內(nèi)核(以Hi3531為例),以生成相應(yīng)的頭文件

cd ./linux-3.0.y

cp arch/arm/configs/godnet_defconfig .config

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage

內(nèi)核源代碼準備完畢,可以進入PCIE MCC驅(qū)動模塊的源代碼目錄,編譯驅(qū)動:

cd ../../drv/pcie_mcc

如果是編譯主片的ko,直接使用make命令

make

如果是編譯從片的ko文件,請帶上參數(shù)target=slave

make target=slave

(說明:默認情況下編譯驅(qū)動的工具鏈是arm-hisiv100nptl-linux-,如需更改請帶上參數(shù) CROSS_COMPILE=arm-hisiv200-linux-)

2. 鏡像存放目錄說明

編譯完的image,rootfs等存放在osdrv/pub目錄下

pub

│ rootfs_uclibc.tgz ------------------------------------------ hisiv100nptl編譯出的rootfs文件系統(tǒng)

│ rootfs_glibc.tgz ------------------------------------------- hisiv200編譯出的rootfs文件系統(tǒng)

├─image_glibc ------------------------------------------------ hisiv200編譯出的鏡像文件

│ uImage ------------------------------------------------- kernel鏡像

│ u-boot-hi3531_930MHz.bin ------------------------------- u-boot鏡像

│ rootfs_256k.jffs2 -------------------------------------- jffs2 rootfs鏡像(對應(yīng)spi-flash blocksize=256K)

│ rootfs_2k_1bit.yaffs2 ---------------------------------- yaffs2 rootfs鏡像(對應(yīng)nand-flash pagesize=2K ecc=1bit)

├─image_uclibc ----------------------------------------------- hisiv100nptl編譯出的鏡像文件

│ uImage ------------------------------------------------- kernel鏡像

│ u-boot-hi3531_930MHz.bin ------------------------------- u-boot鏡像

│ rootfs_256k.jffs2 -------------------------------------- jffs2 rootfs鏡像(對應(yīng)spi-flash blocksize=256K)

│ rootfs_2k_1bit.yaffs2 ---------------------------------- yaffs2 rootfs鏡像(對應(yīng)nand-flash pagesize=2K ecc=1bit)

└─bin

├─pc

│ mkfs.jffs2

│ mkimage

│ mkfs.cramfs

│ mkyaffs2image

├─board_glibc -------------------------------------------- hisiv200編譯出的單板用工具以及pcie消息通訊層ko

│ flash_eraseall

│ mcc_usrdev_host.ko

│ flash_erase

│ mcc_usrdev_slv.ko

│ hi35xx_dev_slv.ko

│ nandwrite

│ hi35xx_dev_host.ko

│ mcc_drv_slv.ko

│ mtd_debug

│ flash_info

│ mcc_drv_host.ko

│ boot_device.ko

│ pcit_dma_slv.ko

│ sumtool

│ mtdinfo

│ flashcp

│ nandtest

│ nanddump

│ parted_glibc

│ pcit_dma_host.ko

│ gdb-arm-hisiv200-linux

└─board_uclibc ------------------------------------------- hisiv100nptl編譯出的單板用工具以及pcie消息通訊層ko

flash_eraseall

mcc_usrdev_host.ko

flash_erase

mcc_usrdev_slv.ko

hi35xx_dev_slv.ko

nandwrite

hi35xx_dev_host.ko

mcc_drv_slv.ko

mtd_debug

flash_info

parted_uclibc

mcc_drv_host.ko

boot_device.ko

pcit_dma_slv.ko

sumtool

mtdinfo

flashcp

nandtest

gdb-arm-hisiv100nptl-linux

nanddump

pcit_dma_host.ko

3.osdrv目錄結(jié)構(gòu)說明:

osdrv

├─Makefile ------------------------------ osdrv目錄編譯腳本

├─busybox ------------------------------- 存放busybox源代碼的目錄

├─tools --------------------------------- 存放各種工具的目錄

│ ├─board_tools ----------------------- 各種單板上使用工具

│ │ ├─reg-tools-1.0.0 --------------- 寄存器讀寫工具

│ │ ├─mtd-utils --------------------- flash裸讀寫工具

│ │ ├─udev-100 ---------------------- udev工具集

│ │ ├─gdb --------------------------- gdb工具

│ │ ├─parted ------------------------ 大容量硬盤分區(qū)工具

│ │ └─e2fsprogs --------------------- mkfs工具集

│ └─pc_tools -------------------------- 各種pc上使用工具

│ ├─mkfs.cramfs ------------------- cramfs文件系統(tǒng)制作工具

│ ├─mkfs.jffs2 -------------------- jffs2文件系統(tǒng)制作工具

│ ├─mkimage ----------------------- uImage制作工具

│ ├─mkyaffs2image301 -------------- yaffs2文件系統(tǒng)制作工具

│ ├─nand_production --------------- nand flash燒寫文件制作工具

│ └─uboot_tools ------------------- uboot鏡像制作工具、xls文件及ddr初始化腳本、bootrom工具

├─toolchain ----------------------------- 存放工具鏈的目錄

│ ├─arm-hisiv100nptl-linux ---------------- hisiv100nptl交叉工具鏈

│ └─arm-hisiv200-linux ---------------- hisiv200交叉工具鏈

├─pub ----------------------------------- 存放各種鏡像的目錄

│ ├─image_glibc ----------------------- 基于hisiv100nptl工具鏈編譯,可供FLASH燒寫的映像文件,包括uboot、內(nèi)核、文件系統(tǒng)

│ ├─image_uclibc ---------------------- 基于hisiv200工具鏈編譯,可供FLASH燒寫的映像文件,包括uboot、內(nèi)核、文件系統(tǒng)

│ ├─bin ------------------------------- 各種未放入根文件系統(tǒng)的工具

│ │ ├─pc ---------------------------- 在pc上執(zhí)行的工具

│ │ ├─board_glibc ------------------- 基于hisiv100nptl工具鏈編譯,在單板上執(zhí)行的工具

│ │ └─board_uclibc ------------------ 基于hisiv200工具鏈編譯,在單板上執(zhí)行的工具

│ ├─rootfs_uclibc.tgz ----------------- 基于hisiv100nptl工具鏈編譯的根文件系統(tǒng)

│ └─rootfs_glibc.tgz ------------------ 基于hisiv200工具鏈編譯的根文件系統(tǒng)

├─drv ----------------------------------- 存放外設(shè)驅(qū)動的目錄

│ └─pcie_mcc -------------------------- pcie消息通訊層驅(qū)動

├─rootfs_scripts ------------------------ 存放根文件系統(tǒng)制作腳本的目錄

├─uboot --------------------------------- 存放uboot源代碼的目錄

└─kernel -------------------------------- 存放kernel源代碼的目錄

4.注意事項

(1)使用某一工具鏈編譯后,如果需要更換工具鏈,請先將原工具鏈編譯文件清除,然后再更換工具鏈編譯。方法是make clean.

(2)在windows下復(fù)制源碼包時,linux下的可執(zhí)行文件可能變?yōu)榉强蓤?zhí)行文件,導(dǎo)致無法編譯使用;u-boot或內(nèi)核下編譯后,會有很多符號鏈接文件,在windows下復(fù)制這些源碼包, 會使源碼包變的巨大,因為linux下的符號鏈接文件變?yōu)閣indows下實實在在的文件,因此源碼包膨脹。因此使用時請注意不要在windows下復(fù)制源代碼包。

(3)目前網(wǎng)絡(luò)為自適應(yīng)模式,如果要修改為固定某種速率模式,需要修改文件kernel/linux-3.0.y/drivers/net/stmmac/stmmac_mdio.c:

關(guān)掉宏定義TNK_HW_PLATFORM_ADJUST,注釋掉33行;

選擇需要固定配置的速率,例如固定配置為百兆全雙工的話,打開46行宏定義PHY_SPEED_100即可。

(4)Hi3531支持硬浮點,文件系統(tǒng)中發(fā)布的庫都是硬浮點庫。因此請用戶注意,所有Hi3531板端代碼編譯時需要在Makefile里面添加以下命令:

CFLAGS += -march=armv7-a -mcpu=cortex-a9 –mfloat-abi=softfp -mfpu=vfpv3-d16

CXXFlAGS +=-march=armv7-a -mcpu=cortex-a9 –mfloat-abi=softfp -mfpu=vfpv3-d16

其中CXXFlAGS中的XX根據(jù)用戶Makefile中所使用宏的具體名稱來確定,e.g:CPPFLAGS。

以上是“Ubuntu上hi3531交叉編譯環(huán)境arm-hisiv100nptl-linux怎么搭建”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI