Hi3516A开发--编译内核、uboot
操作之前先安裝必要的軟件:
參看:Hi3516A開發--編譯整個osdrv目錄所遇到的問題總結
首先SDK安裝
拷貝Hi3516A_SDK_V1.0.5.0.tgz至Linux下
#tar -zxvf Hi3516A_SDK_V1.0.5.0.tgz
# cd Hi3516A_SDK_V1.0.5.0/
# ./sdk.unpack
但是海思SDK安裝時,無法運行sdk.unpack。
解決方法參看:?海思SDK安裝時,無法運行sdk.unpack
問題
海思SDK安裝時,無法運行sdk.unpack
原因
BASH 和 DASH 的問題。
Debian和Ubuntu中,/bin/sh默認已經指向dash,這是一個不同于bash的shell,它主要是為了執行腳本而出現,而不是交互, ?
它速度更快,但功能相比bash要少很多,語法嚴格遵守POSIX標準。
解決
方法一
1、vim scripts/common.sh; ?第一行, #!/bin/sh 為 #!/bin/bash
2、vim sdk.unpack 第一行, #!/bin/sh 為 #!/bin/bash, 也可以正常解壓
方法二
# sudo dpkg-reconfigure dash
Using dash as the system shell will improve the system's overall performance. It does not alter the shell presented to interactive users.
Use dash as the default system shell (/bin/sh)?
選擇no
備注
兩種方式都可以解決問題,但是海思的SDK中很多sh文件,逐個修改很麻煩,用第二種方式修改系統,一勞永逸!
再安裝交叉編譯器:Hi3516A開發--安裝交叉編譯器
開始編譯內核、uboot。有兩種編譯方式:
一、整個編譯
(1)編譯整個osdrv目錄:
make OSDRV_CROSS=arm-hisiv300-linux all或者
make OSDRV_CROSS=arm-hisiv400-linux all
如果整個編譯會出現錯誤:
compr_zlib.c:39:18: fatal error: zlib.h: 沒有那個文件或目錄
導致編譯中斷,原因是沒有安裝zlib包,安裝:
sudo apt-get install zlib1g-dev
編譯lzma遇到如下問題:
configure: error: C++ compiler cannot create executables
安裝:
sudo apt-get install build-essential
/* 如果單板使用spi接口nand flash作為存儲介質,請在編譯整個目錄時傳入如下FLASH_TYPE參數 */
make OSDRV_CROSS=arm-hisiv300-linux all FLASH_TYPE=spinand或者
make OSDRV_CROSS=arm-hisiv400-linux all FLASH_TYPE=spinand
(2)清除整個osdrv目錄的編譯文件:
make OSDRV_CROSS=arm-hisiv300-linux clean
或者
make OSDRV_CROSS=arm-hisiv400-linux clean
(3)徹底清除整個osdrv目錄的編譯文件,除清除編譯文件外,還刪除已編譯好的鏡像:
make OSDRV_CROSS=arm-hisiv300-linux distclean
或者
make OSDRV_CROSS=arm-hisiv400-linux distclean
二、單獨編譯
(1)單獨編譯kernel:
待進入內核源代碼目錄后,執行以下操作
cp arch/arm/configs/hi3516a_full_defconfig ?.config
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- uImage
或者
cp arch/arm/configs/hi3516a_full_defconfig ?.config
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- uImage
(2)單獨編譯模塊:
待進入內核源代碼目錄后,執行以下操作
cp arch/arm/configs/hi3516a_full_defconfig ?.config
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- modules
或者
cp arch/arm/configs/hi3516a_full_defconfig ?.config
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- modules
說明:
編譯內核時需要在 make 后添加兩個參數: ARCH=arm CROSS_COMPILE=arm-hisiXXXlinux-,其中 CROSS_COMPILE 表示工具鏈。文檔中統一以 CROSS_COMPILE=arm-hisiXXXlinux-來表示兩種情況。
Hi3516A_V100R001C01SPCxxx 對應 uclibc,使用 uclibc 工具鏈時, CROSS_COMPILE= armhisiv300-linux -
Hi3516A_V100R001C02SPCxxx 對應 glibc,使用 glibc 工具鏈時, CROSS_COMPILE=armhisiv400-linux-
如果編譯過程中出現錯誤,按順序執行以下命令:
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- clean
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- uImage
問題1:當執行make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- menuconfig時出現如下錯誤:
? HOSTCC ?scripts/basic/fixdep
? HOSTCC ?scripts/kconfig/conf.o
?*** Unable to find the ncurses libraries or the
?*** required header files.
?*** 'make menuconfig' requires the ncurses libraries.
?***?
?*** Install ncurses (ncurses-devel) and try again.
?***?
make[1]: *** [scripts/kconfig/dochecklxdialog] 錯誤 1
make: *** [menuconfig] 錯誤 2
解決方法:?sudo apt-get install ncurses-dev
問題2:當執行make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- uImage時出現如下錯誤:
"mkimage" command not found - U-Boot images will not be built
make[1]: *** [arch/arm/boot/uImage] 錯誤 1
make: *** [uImage] 錯誤 2
按照提示應該安裝uboot-mkimage
sudo apt-get install uboot-mkimage
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關系樹 ? ? ??
正在讀取狀態信息... 完成 ? ? ??
現在沒有可用的軟件包 uboot-mkimage,但是它被其它的軟件包引用了。
這可能意味著這個缺失的軟件包可能已被廢棄,
或者只能在其他發布源中找到
可是下列軟件包取代了它:
? u-boot-tools
E: 軟件包 uboot-mkimage 沒有可供安裝的候選者
按照其提示,安裝”u-boot-tools“即可:
sudo apt-get install u-boot-tools
(3)單獨編譯uboot:
待進入boot源代碼目錄后,執行以下操作
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- hi3516a_config?
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-
將生成的u-boot.bin 復制到osdrv/tools/pc/uboot_tools/目錄下
運行./mkboot.sh reg_info.bin u-boot-ok.bin
生成的u-boot-ok.bin即為可用的u-boot鏡像
或者
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- hi3516a_config?
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux-
將生成的u-boot.bin 復制到osdrv/tools/pc/uboot_tools/目錄下
mkboot.sh權限不夠:chmod 777 mkboot.sh
運行./mkboot.sh reg_info.bin u-boot-ok.bin
生成的u-boot-ok.bin即為可用的u-boot鏡像
U-BOOT ? ? ? ? ? elf格式的image
U-BOOT.lds ? ? ?鏈接文件
U-BOOT.bin ? ? 原始二進制文件(raw image)
U-BOOT.MAP ?符號表
U-BOOT.SREC ?S-Record格式的image
總結
以上是生活随笔為你收集整理的Hi3516A开发--编译内核、uboot的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年中国即时配送行业趋势研究报告
- 下一篇: Hi3516A开发--内存换算