• Hi3531 SDK v2.0.8.0 安装 分类: HI3531 2013-08-21 10:25 2748人阅读 评论(1) 收藏


    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。终于编出来了。


    先到这里

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    第十二周
    第十一周作业
    第十周作业
    第九周作业
    第五周总结和实验报告三
    第四周总结和实验报告二
    第一周实验报告和第三周课程总结
    第二周总结
    2019春总结作业
    2019年春第二次课程设计实验报告
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706836.html
Copyright © 2020-2023  润新知