嵌入式入门(2)

本文详细介绍了如何在Linux虚拟机中安装和编译SDK,包括设置共享文件夹、解压SDK、转移文件、安装交叉编译器以及解决编译过程中遇到的常见问题,如命令找不到、依赖库缺失等。
摘要由CSDN通过智能技术生成

本节我们开始对SDK进行安装和编译

因为我是用的是vmware的虚拟机
所以首先需要将SDK包传到linux中
可以使用putty与linux连接,传输文件
但这里,我们应用的是共享文件夹
在这里插入图片描述
通过这个方式可以设置共享文件夹
在linux平台可以看见这个windos文件夹里的文件
注意:要在虚拟机关闭的情况下进行设置
运行和挂起时都不能设置
在这里插入图片描述
完成后
1、输入 cd /mnt/hgfs
进入共享区
ls查看你刚才设定的共享文件夹
通过tar -zxf Hi3536_SDK_Vx.x.x.x.tgz 进行解压
在共享区进行编译会出现报错:
ln: 创建符号链接 “asm”: 不支持的操作

2、所以要把文件通过CP之类的命令转移到其他区域

3、打开解压出的Hi3536_SDK_Vx.x.x.x目录
运行./sdk.unpack(请用root或sudo权限执行)

4、在linux服务器上安装交叉编译器
1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):
进入Hi3536_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv300-linux目录,运行chmod +x cross.v300.install,然后运行./cross.v300.install即可。
2) 安装glibc交叉编译器:
进入Hi3536_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv400-linux目录,运行chmod +x cross.v400.install,然后运行./cross.v400.install即可。
3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。

5、编译osdrv
本目录下的编译脚本支持选用下文提到的两种工具链中的任何一种进行编译,因此编译时需要带上一个编译参数以指定对应的工具链 – arm-hisiv300-linux 和 arm-hisiv400-linux。其中,arm-hisiv300-linux工具链对应uclibc库,arm-hisiv400-linux工具链对应glibc库。具体命令如下

(1)编译整个osdrv目录:
make OSDRV_CROSS=arm-hisiv300-linux CPU_TYPE=XXX PCI_MODE=XXX FLASH_TYPE=XXX all
或者
make OSDRV_CROSS=arm-hisiv400-linux CPU_TYPE=XXX PCI_MODE=XXX FLASH_TYPE=XXX all

参数说明:
CPU_TYPE:共有master、slave以及single三个参数。主CPU引导从CPU启动时,编译主CPU版本时使用master参数,编译从CPU版本时使用slave参数。只使用主CPU,编译版本时选择single参数。

PCI_MODE:共有master、slave以及none三个参数。编译PCIE主片版本时使用master参数,编译PCIE从片使用slave参数,编译不使用PCIE的版本时使用none参数。

FLASH_TYPE:如果使用SPINAND器件,需要使用参数spinand;如果不使用SPINAND器件,不使用该参数。

(2)清除整个osdrv目录的编译文件:
make OSDRV_CROSS=arm-hisiv300-linux clean
或者
make OSDRV_CROSS=arm-hisiv400-linux clean

编译的过程可能会出现报错,读者根据自己的需要进行修正
笔者这里列举出一些自己遇到的问题和解决方案
执行编译时 可能会出现以下报错
1.make[2]: arm-hisiv300-linux-gcc: Command not found
原因:makefile只认识arm-hisiv300-linux或者arm-hisiv400-linux
解决方案:给原来的工具链重新创建符号链接为arm-hisiv300-linux或者arm-hisiv400-linux并在~/.brashrc中export PATH导出环境编译,然后source .brashrc使生效。
2.报错:
arm-hisiv300-linux-gcc: command not found
解决方法:
这是因为宿主机是64 位 而交叉编译器是针对32位制作的。所以要安装对应的32位库。
安装命令:
sudo apt install lib32z1-dev、
3.修改后仍然报错
记得每一次要把之前的东西clean掉再编译,不然还是会出错。

编译成功后,本阶段结束

本资源为arm-linux下的海思编译链工具V300 C语言有三种标准库如下: 1.Glibc glibc = GNU C Library 是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。 目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。 其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。 2.uClibc 一个小型的C语言标准库,主要用于嵌入式。 其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。 对应的,此处的u意思是μ,Micro,微小的意思。 uClibc的特点: (1)uClibc比glibc要小很多。 (2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。 3.EGLIBC EGLIBC = Embedded GLIBC EGLIBC是,(后来)glibc的原创作组织FSF所(新)推出的,glibc的一种变体,目的在于将glibc用于嵌入式系统。 EGLIBC的目标是: (1)保持源码和二进制级别的兼容于Glibc 源代码架构和ABI层面兼容 如果真正实现了这个目标,那意味着,你之前用glibc编译的程序,可以直接用eglibc替换,而不需要重新编译。 这样就可以复用之前的很多的程序了。 (2)降低(内存)资源占用/消耗 (3)使更多的模块为可配置的(以实现按需裁剪不需要的模块) (4)提高对于交叉编译(cross-compilation)和交叉测试(cross-testing)的支持 【目前了解到的海思交叉编译工具链的应用环境】 arm-hisiv100-linux为基于uclibc的工具链,arm-hisiv200-linux 为基于 glibc 的工具链; arm-hisiv300-linux为基于uclibc的工具链,arm-hisiv400-linux 为基于 glibc 的工具链; arm-hisiv500-linux为基于uclibc的工具链,arm-hisiv600-linux 为基于 glibc 的工具链。 (在开发的时候,你编译内核所用的交叉编译链跟用户的应用程序所用的交叉编译链一定需要相同,不然没法调用系统内核的依赖库)   其中eglibc这种很容易被人开发者忽视,从而选错了编译工具链。 uClibc和Glibc并不相同,两者有许多不同之处,有可能给你带来一些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值