海思 HI 35xx u-boot+kernel+rootfs移植

本文详述了在Linux环境下移植海思HI 35xx平台的u-boot、kernel及rootfs过程中遇到的问题及解决方案。包括:修复SDK打包脚本错误、安装uclibc和glibc交叉编译器、搭建板载开发环境、处理kernel编译错误、解决rootfs制作与烧录问题,并提供了详细的步骤和命令示例。
摘要由CSDN通过智能技术生成

PC端开发环境安装:

sudo ./sdk.unpack

报如下错误:

./sdk.unpack: 7: ./sdk.unpack: WARN: not found

./sdk.unpack: 8: ./sdk.unpack: ECHO: not found

./sdk.unpack: 20: ./sdk.unpack: ECHO: not found

./sdk.unpack: 22: ./sdk.unpack: run_command_progress_float: not found

./sdk.unpack: 24: ./sdk.unpack: ECHO: not found

./sdk.unpack: 26: ./sdk.unpack: run_command_progress_float: not found

./sdk.unpack: 28: ./sdk.unpack: ECHO: not found

./sdk.unpack: 30: ./sdk.unpack: run_command_progress_float: not found

./sdk.unpack: 32: ./sdk.unpack: ECHO: not found

./sdk.unpack: 34: ./sdk.unpack: run_command_progress_float: not found

原因和3531一样,修改sdk.unpack文件,将首行的 #!/bin/sh 改为 #!/bin/bash 运行OK。

uclibc:

uclibc = Micro library

一个小型的C语言标准库,主要用于嵌入式。

其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。

对应的,此处的u意思是μ,Micro,微小的意思。

uClibc的特点:

(1)uClibc比glibc要小很多。

(2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。

glibc:

glibc = GNU C library

是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。

目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。

其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。

1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):

       进入hi3520D_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100nptl-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。

2) 安装glibc交叉编译器(注意,需要有sudo权限或者root权限,暂时不支持glibc版本):

       进入hi3520D_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。

 3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。

 

板载开发环境搭建:

/bin/sh: 1: ./configure: not found

发现系统的/bin/sh的映射有问题,于是修改系统配置:

运行:

sudo dpkg-reconfigure dash

出现:

 

选择NO,确认。

重新编译。

/home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/kernel/linux-3.0.y /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.

提示不能使用defined(@array),应该忽略掉它。

我们找到这个文件osdrv/kernel/linux-3.0.y/kernel/timeconst.pl。打开文件,找到这个defined(@array)。

修改 if (!defined(@val)) if (!@val) 后依然报错,结果查看发现,当重新make之后,这个文件又变为之前的了。

执行:make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

报错:

 *** Unable to find the ncurses libraries or the

 *** required header files.

 *** 'make menuconfig' requires the ncurses libraries.

 ***

 *** Install ncurses (ncurses-devel) and try again.

 ***

提示没有 ncurses 库。

使用命令安装库:

Reading package lists... Done

Building dependency tree      

Reading state information... Done

E: Unable to locate package ncurses-devel

提示不能安装到本地。

重新安装:

sudo apt-get install libncurses5-dev

安装成功,测试:sudo make menuconfig 命令 OK 。

再次编译kernel报错:

"mkimage" command not found - U-Boot images will not be built

/home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/kernel/linux-3.0.y/arch/arm/boot/Makefile:76: recipe for target 'arch/arm/boot/uImage' failed

make[1]: *** [arch/arm/boot/uImage] Error 1

/home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/kernel/linux-3.0.y/arch/arm/Makefile:288: recipe for target 'uImage' failed

make: *** [uImage] Error 2

安装这个工具解决:

apt-get install u-boot-tools

现在可以在arch/arm/boot下面找到生成的image文件。

根据osdrv/readme_cn.txt操作步骤编译uboot成功。

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.

和第一次安装的时候报错一样,但是单独编译kernel的时候却没问题,说明很可能是Makefile的问题。

打开Makefile确定问题原因:

#rm $(OSDRV_DIR)/kernel/linux-3.0.y -rf

#tar xzf $(OSDRV_DIR)/kernel/linux-3.0.y.tgz -C $(OSDRV_DIR)/kernel/

确定问题原因,因为每次在编译kernel的时候,Makefile都会重新解压一份kernel,然后使用解压的kernal进行编译,这样我之前修改的文件就会被覆盖掉。屏蔽这个两行内容,重新编译。

mv /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/pub/rootfs /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/pub/rootfs_uclibc

tar xzf /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/toolchain/arm-hisiv100nptl-linux/runtime_lib/armv7a_soft/lib.uClibc.tgz \

-C /home/ubuntu/Work/Hi/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值