设为首页 收藏本站
查看: 881|回复: 0

[经验分享] Ubuntu上hi3531交叉编译环境arm-hisiv100nptl-linux搭建过程

[复制链接]

尚未签到

发表于 2018-4-29 15:50:50 | 显示全部楼层 |阅读模式
  安装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。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-453700-1-1.html 上篇帖子: Ubuntu设置显示器分辨率 下篇帖子: Ubuntu libc.so.6被误删解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表