Hi3531 SDK v2.0.8.0 安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mao0514/article/details/10135501

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即可。

      进入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100nptl-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, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。


5、编译osdrv


    参见osdrv目录下readme


———————以上为厂家提供教程———————


几点说明:

1、uclibc是面向嵌入式Linux系统的小型的C标准库,glibc是Linux的标准运行库。

使用某一工具链编译后,如果需要更换工具链,请先将原工具链编译文件清除,然后再更换工具链编译。

开始我发现使用arm-hisiv100-linux编译内核时,会提示找不到该命令,换到arm-hisiv200-linux可以。估计就是上述问题吧。

2、source命令即执行命令,和“./”是一样的。(个人理解)

3、Linux下也有环境变量,如下:

    常见的配置文件包括:

      (1-1)/etc/profile:对所有用户生效;此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行;并从/etc/profile.d目录的配置文件中搜集shell的设置。例如:编辑/etc/profile文件,添加CLASSPATH变量   

          # vi /etc/profile

          添加一行:export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

          修改后需要执行重新登录才能生效,也可以执行命令source /etc/profile来生效

     (1-2)/etc/bashrc:对所有用户生效;为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取编辑方法如上,不再赘述


     环境变量的查看

        (1)使用echo命令查看单个环境变量。例如:echo $PATH

        (2)使用env查看所有环境变量。例如:env

        (3)使用set查看所有本地定义的环境变量。例如:set

          另外,unset可以删除指定的环境变量。

          常用的环境变量



          PATH 决定了shell将到哪些目录中寻找命令或程序

          HOME 当前用户主目录

          HISTSIZE 历史记录数

          LOGNAME 当前用户的登录名

          HOSTNAME 指主机的名称

          SHELL 当前用户Shell类型

          LANGUGE  语言相关的环境变量,多语言可以修改此环境变量

          MAIL 当前用户的邮件存放目录

          PS1 基本提示符,对于root用户是#,对于普通用户是$




好,继续。


这里的重点肯定在第五步。下面详细说说。


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源代码的目录


第一步,开始编译内核。


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


即执行了make menuconfig 和 make uImage。

执行make menuconfig 后会显示一个菜单,大概是对Linux内核的配置,不过对于刚接触Linux的我来说,先略过,直接Quit。

执行make uImage会编译出Linux内核,先说一下 几种linux内核文件的区别 (网上一把,随便抓一个过来)


vmlinux  编译出来的最原始的内核文件,未压缩。
zImage   是vmlinux经过gzip压缩后的文件。
bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
uImage   U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
vmlinuz  是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
initrd   是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。

多说一句的话,就是:
zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。


所以呢,由于我使用uboot来load,编译出的内核肯定会有uImage这个格式。


但是,我在这里碰到了一个问题:


make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage

  CHK     include/linux/version.h

  CHK     include/generated/utsrelease.h

make[1]: `include/generated/mach-types.h' is up to date.

  CALL    scripts/checksyscalls.sh

  CHK     include/generated/compile.h

  Kernel: arch/arm/boot/Image is ready

  SHIPPED arch/arm/boot/compressed/lib1funcs.S

  AS      arch/arm/boot/compressed/lib1funcs.o

  LD      arch/arm/boot/compressed/vmlinux

  OBJCOPY arch/arm/boot/zImage

  Kernel: arch/arm/boot/zImage is ready

  UIMAGE  arch/arm/boot/uImage

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

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

make: *** [uImage] Error 2


系统提示"mkimage" command not found - U-Boot images will not be built。

也就是说,mkimage该工具没起作用。mkimage是在编译完uboot之后生成的,我查看了一下,我这里确实有,所以按照原理来说,把它放到该呆的地方去就成啦。

按照上述对环境变量的解释,修改/etc/bashrc,在里面加入了mkimage的路径,我编!结果不成。

把mkimage放/bin下,我再编!OK。

 

再想想,我看了一下环境变量:

[root@localhost linux-3.0.y]# echo $PATH

/usr/bin:/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv100-linux/target/bin:/usr/lib/qt-3.3/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wanghx/bin

这里插一句,Linux下环境变量是靠:来分割的。

把mkimage扔到/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin下试试,嗯,终于成了。

  CHK     include/linux/version.h

  CHK     include/generated/utsrelease.h

make[1]: `include/generated/mach-types.h' is up to date.

  CALL    scripts/checksyscalls.sh

  CHK     include/generated/compile.h

  Kernel: arch/arm/boot/Image is ready

  SHIPPED arch/arm/boot/compressed/lib1funcs.S

  AS      arch/arm/boot/compressed/lib1funcs.o

  LD      arch/arm/boot/compressed/vmlinux

  OBJCOPY arch/arm/boot/zImage

  Kernel: arch/arm/boot/zImage is ready

  UIMAGE  arch/arm/boot/uImage

Image Name:   Linux-3.0.8

Created:      Thu Apr 25 15:42:10 2013

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    3496948 Bytes = 3414.99 kB = 3.33 MB

Load Address: 80008000

Entry Point:  80008000

  Image arch/arm/boot/uImage is ready

看看有木有:

[root@localhost linux-3.0.y]# cd arch/arm/boot

[root@localhost boot]# ls

bootp  compressed  Image  install.sh  Makefile  uImage  zImage


OK。终于编出来了。


先到这里

展开阅读全文

没有更多推荐了,返回首页