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键,可以看到下图,说明环境变量设置成功了

[email protected]:/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 看是否编译成功

[email protected]:/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。

时间: 2024-10-13 01:39:14

Ubuntu上hi3531交叉编译环境arm-hisiv100nptl-linux搭建过程的相关文章

Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 搭建过程

; font-family:Arial,Console,Verdana,'Courier New'"> ubuntu12.04arm-linux-gcc 安装环境 Linux版本:Ubuntu 12.04    内核版本:Linux 3.5.0   交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器我已经上传到了资源上,可以随便下载,点此下载 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装.配置交叉编译工具链.在该环境下编译出嵌入式Linux系统所

Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 建设过程

安装SDK 1.Hi3531 SDK包的位置 在"Hi3531_V100R001***/01.software/board"夹,你可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 文件, 文件就是Hi3531的软件开发包. 2.解压缩SDK包 在linuxserver上(或者一台装有linux的PC上.主流的linux发行版本号均能够),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz , 解压缩该文件,能够得到一个Hi3531_SDK_Vx.x.

【Linux学习】Ubuntu下嵌入式交叉编译环境arm-linux-gcc搭建

(1)首先选择一个路径用来存放arm-linux-gcc.我选用的是/home/book,并在下面建立一个文件夹arm-linux-gcc. (2)利用cp EABI-4.3.3_Emdedsky_20100610.tar.bz2 arm-linux-gcc,将压缩包EABI-4.3.3_Emdedsky_20100610.tar.bz2复制到arm-linux-gcc中 (3)解压EABI-4.3.3_Emdedsky_20100610.tar.bz2 记录下文件的存放目录: (4)配置系统环

ubuntu上Android开发环境及依赖项

[时间:2018-07] [状态:Open] [关键词:ubuntu,系统安装,开发环境搭建,android,工具集] Ubuntu系统版本:v18.04 LTS c/c++ dev (build-essential) git / git-review / gitk git 可视化工具 meld 代码对比工具 net-tools 网络查看及配置工具 Synergy 版本号:v1.8.8 跨主机鼠标键盘共享工具 Synergy 与 Ubuntu 18.04 不兼容的问题及解决方案 主要问题及策略:

Cocos2d-x 3.6在Ubuntu上的开发环境构建

1.解压下载的包,找到build目录: 在终端下先执行install-deps-linux.sh文件 结果类似: 时间可能比较长. 2.回到解压包的根目录下执行setup.py: 可以看出这个执行完成的是检测系统环境并在配置文件中加入需要的环境变量,会将原配置文件备份. 3.在解压包的目录运行 cmake . 注意后面代表当前目录的 . (不要在意sudo) 4.make 用cmake生成的Makefile就可以用make了,因此在解压包目录运行make,会执行构建过程,构建完成之后类似这样:

Ubuntu下配置交叉编译环境

[email protected]:~$ sudo apt-get update # 如果不安装 gawk subversion wine1.6-dev 编译会报错 [email protected]:~$ sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk subversion wine1.6-dev [email protected]-ubuntu:~$ git clone g

ubuntu上minigui调试环境的建立

minigui一共有两个版本:商业版(2.0.4)和GPL版(1.6.10),问了一下飞漫软件,使用商业版前期的费用是9万,有技术支持,包括5000个licenses的费用,后期10K的量的话,每个licenses要6块,50K的话,就是4块,如果用GPL版的话,就没有前期的费用,只有licenses的费用,老板想了一下,我们还是使用开源版,其实我要是老板的话,我就用商业版,出产品快阿.... ubuntu下minigui环境的建立: minigui需要一个qvfb的支持: sudo apt-g

在Ubuntu上配置LAMP环境

LAMP环境的配置总共分成3个部分:安装,配置和测试 1,安装 安装Apachesudo apt-get install apache2 Apache2在安装之后会新建一个www目录/var/www/ 安装MySQL sudo apt-get install mysql-server mysql-client 安装过程中会提示输入root用户的密码 安装PHP sudo apt-get install php5 libapache2-mod-php5 这一步安装完成之后需要重启Apache以让它

Ubuntu上安装PHP环境-mysql+apache+php-Linux操作系统

安装MYSQL 1. sudo apt-get install mysql-server 或者 apt-get isntall mysql-client 2. 安装过程中会提示设置密码,注意设置了不要忘了. 3.安装完成后检测是否安装成功:sudo netstat -tap | grep mysql 4.登陆MYSQL数据库: mysql -u root -p 5.查看当前的数据库:show databases;       PS: 不要忘了 ; 安装apache 1.sudo apt-get