共计 8931 个字符,预计需要花费 23 分钟才能阅读完成。
自动写代码机器人,免费开通
丸趣 TV 小编给大家分享一下 Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 怎么搭建,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
安装 SDK
1、Hi3531 SDK 包位置
在 Hi3531_V100R001***/01.software/board 目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件,
该文件就是 Hi3531 的软件开发包。
2、解压缩 SDK 包
在 linux 服务器上(或者一台装有 linux 的 PC 上,主流的 linux 发行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz,
解压缩该文件,可以得到一个 Hi3531_SDK_Vx.x.x.x 目录。
3、展开 SDK 包内容
返回 Hi3531_SDK_Vx.x.x.x 目录,运行./sdk.unpack(请用 root 或 sudo 权限执行) 将会展开 SDK 包打包压缩存放的内容,请按照提示完成操作。
如果您需要通过 WINDOWS 操作系统中转拷贝 SDK 包,请先运行./sdk.cleanup,收起 SDK 包的内容,拷贝到新的目录后再展开。
4、在 linux 服务器上安装交叉编译器
1)安装 uclibc 交叉编译器(注意,需要有 sudo 权限或者 root 权限):
进入 Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100-linux 目录,运行 chmod +x cross.install,然后运行./cross.install 即可。
2) 安装 glibc 交叉编译器(注意,需要有 sudo 权限或者 root 权限):
进入 Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux 目录,运行 chmod +x cross.install,然后运行./cross.install 即可。
3) 执行 source /etc/profile,安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。也可以 source /etc/bash.bashrc。
在终端上输入命令 arm-linux 再按 Tab 键,可以看到下图,说明环境变量设置成功了
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 使用说明
本目录设计思路为一套源代码支持两种工具链编译,因此需要通过编译参数指定不同的工具链。其中 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:
待进入内核源代码目录后,执行以下操作
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 源代码目录后,执行以下操作
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) 制作文件系统镜像:
在 osdrv/pub/ 中有已经编译好的文件系统,因此无需再重复编译文件系统,只需要根据单板上 flash 的规格型号制作文件系统镜像即可。
spi flash 使用 jffs2 格式的镜像,制作 jffs2 镜像时,需要用到 spi flash 的块大小。这些信息会在 uboot 启动时会打印出来。建议使用时先直接运行 mkfs.jffs2 工具,根据打印信息填写相关参数。下面以块大小为 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 工具,根据打印信息填写相关参数。下面以 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 驱动模块:
首先,先准备好编译模块时需要连接到的内核源代码目录:
cd ./kernel/
tar -xvf linux-3.0.y.tgz
解压内核源代码之后,需要根据具体的芯片类型,先编译内核 (以 Hi3531 为例),以生成相应的头文件
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
内核源代码准备完毕,可以进入 PCIE MCC 驱动模块的源代码目录,编译驱动:
cd ../../drv/pcie_mcc
如果是编译主片的 ko,直接使用 make 命令
make
如果是编译从片的 ko 文件,请带上参数 target=slave
make target=slave
(说明:默认情况下编译驱动的工具链是 arm-hisiv100nptl-linux-,如需更改请带上参数 CROSS_COMPILE=arm-hisiv200-linux-)
2. 镜像存放目录说明
编译完的 image,rootfs 等存放在 osdrv/pub 目录下
pub
│ rootfs_uclibc.tgz —————————————— hisiv100nptl 编译出的 rootfs 文件系统
│ rootfs_glibc.tgz ——————————————- hisiv200 编译出的 rootfs 文件系统
│
├─image_glibc ———————————————— hisiv200 编译出的镜像文件
│ uImage ————————————————- kernel 镜像
│ u-boot-hi3531_930MHz.bin ——————————- u-boot 镜像
│ rootfs_256k.jffs2 ————————————– jffs2 rootfs 镜像 (对应 spi-flash blocksize=256K)
│ rootfs_2k_1bit.yaffs2 ———————————- yaffs2 rootfs 镜像 (对应 nand-flash pagesize=2K ecc=1bit)
│
├─image_uclibc ———————————————– hisiv100nptl 编译出的镜像文件
│ uImage ————————————————- kernel 镜像
│ u-boot-hi3531_930MHz.bin ——————————- u-boot 镜像
│ rootfs_256k.jffs2 ————————————– jffs2 rootfs 镜像 (对应 spi-flash blocksize=256K)
│ rootfs_2k_1bit.yaffs2 ———————————- yaffs2 rootfs 镜像 (对应 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 目录结构说明:
osdrv
├─Makefile —————————— osdrv 目录编译脚本
├─busybox ——————————- 存放 busybox 源代码的目录
├─tools ——————————— 存放各种工具的目录
│ ├─board_tools ———————– 各种单板上使用工具
│ │ ├─reg-tools-1.0.0 ————— 寄存器读写工具
│ │ ├─mtd-utils ——————— flash 裸读写工具
│ │ ├─udev-100 ———————- udev 工具集
│ │ ├─gdb ————————— gdb 工具
│ │ ├─parted ———————— 大容量硬盘分区工具
│ │ └─e2fsprogs ——————— mkfs 工具集
│ └─pc_tools ————————– 各种 pc 上使用工具
│ ├─mkfs.cramfs ——————- cramfs 文件系统制作工具
│ ├─mkfs.jffs2 ——————– jffs2 文件系统制作工具
│ ├─mkimage ———————– uImage 制作工具
│ ├─mkyaffs2image301 ————– yaffs2 文件系统制作工具
│ ├─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、内核、文件系统
│ ├─image_uclibc ———————- 基于 hisiv200 工具链编译,可供 FLASH 烧写的映像文件,包括 uboot、内核、文件系统
│ ├─bin ——————————- 各种未放入根文件系统的工具
│ │ ├─pc —————————- 在 pc 上执行的工具
│ │ ├─board_glibc ——————- 基于 hisiv100nptl 工具链编译,在单板上执行的工具
│ │ └─board_uclibc —————— 基于 hisiv200 工具链编译,在单板上执行的工具
│ ├─rootfs_uclibc.tgz —————– 基于 hisiv100nptl 工具链编译的根文件系统
│ └─rootfs_glibc.tgz —————— 基于 hisiv200 工具链编译的根文件系统
├─drv ———————————– 存放外设驱动的目录
│ └─pcie_mcc ————————– pcie 消息通讯层驱动
├─rootfs_scripts ———————— 存放根文件系统制作脚本的目录
├─uboot ——————————— 存放 uboot 源代码的目录
└─kernel ——————————– 存放 kernel 源代码的目录
4. 注意事项
(1) 使用某一工具链编译后,如果需要更换工具链,请先将原工具链编译文件清除,然后再更换工具链编译。方法是 make clean.
(2) 在 windows 下复制源码包时,linux 下的可执行文件可能变为非可执行文件,导致无法编译使用;u-boot 或内核下编译后,会有很多符号链接文件,在 windows 下复制这些源码包, 会使源码包变的巨大,因为 linux 下的符号链接文件变为 windows 下实实在在的文件,因此源码包膨胀。因此使用时请注意不要在 windows 下复制源代码包。
(3) 目前网络为自适应模式,如果要修改为固定某种速率模式,需要修改文件 kernel/linux-3.0.y/drivers/net/stmmac/stmmac_mdio.c:
关掉宏定义 TNK_HW_PLATFORM_ADJUST,注释掉 33 行;
选择需要固定配置的速率,例如固定配置为百兆全双工的话,打开 46 行宏定义 PHY_SPEED_100 即可。
(4)Hi3531 支持硬浮点,文件系统中发布的库都是硬浮点库。因此请用户注意,所有 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 根据用户 Makefile 中所使用宏的具体名称来确定,e.g:CPPFLAGS。
以上是“Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 怎么搭建”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节
丸趣 TV 网 – 提供最优质的资源集合!