当前位置:首页 >> 信息与通信 >>

Hi3531 SDK


Hi3531 SDK 使用笔记(1)
新接触了 HI3531 这款芯片,厂家提供了 SDK,做点开发笔记,供自己查询。这也算是我的 Linux 学习历程。 开发环境: 软件:Windows + FC14 硬件:ATOM + HI3531 ———————以下为厂家提供教程——————— 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, 安装交叉编译器的脚本配置的环境变量就可以生效了, 或者请重新登陆也可。

5、编译 osdrv 参见 osdrv 目录下 readme

———————以上为厂家提供教程——————— 几点说明: 1、uclibc 是面向嵌入式 Linux 系统的小型的 C 标准库,glibc 是 Linux 的标准运行库。 使用某一工具链编译后,如果需要更换工具链,请先将原工具链编译文件清除,然后再更换 工具链编译。 开始我发现使用 arm-hisiv100-linux 编译内核时,会提示找不到该命令,换到 arm-hisiv200-linux 可以。估计就是上述问题吧。 2、source 命令即执行命令,和“./”(个人理解) source 命令用法:source FileName 作用:在当前 bash 环境下读取并执行 FileName 中的命令。 注:该命令通常用命令“.”来替代。 如:source .bash_rc 与 . .bash_rc 是等效的。 注意:source 命令与 shell scripts 的区别是, source 在当前 bash 环境下执行命令,而 scripts 是启动一个子 shell 来执行命令。这样如 果把设置环境变量(或 alias 等等)的命令写进 scripts 中,就只会影响子 shell,无法改 变当前的 BASH,所以通过文件(命令列)设置环境变量时,要用 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 CHK include/linux/version.h include/generated/utsrelease.h

make[1]: `include/generated/mach-types.h' is up to date. CALL CHK scripts/checksyscalls.sh 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 放到/usr/bin 下,我再编!结果还是不成。 再想想,我看了一下环境变量: [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 CHK include/linux/version.h 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 LD arch/arm/boot/compressed/lib1funcs.o arch/arm/boot/compressed/vmlinux

OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage Image Name: Created: Image Type: Data Size: Linux-3.0.8 Thu Apr 25 15:42:10 2013 ARM Linux Kernel Image (uncompressed) 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。终于编出来了。

先到这里。


相关文章:
在HI3531上移植和运行QT4.8.6
HI3531上移植和运行QT4.8.6_计算机软件及应用_IT/计算机_专业资料。在HI3531上移植和运行QT4.8.6在HI3531上移植和运行QT4.8.6在...
minigui移植到hi3531
miniGUI3.0.12 移植到 Hi3531 分类: linux2013-04-22 10:01 412 人阅读 评论(1) 收藏 举报 minigui hi3531 miniGUI3.0.12 移植到 Hi3531 之前一直在用 ...
行车记录仪主控芯片_图文
Hi3518C、 Hi3518E、Hi3532、Hi3531、Hi3507、Hi3517、Hi3516、Hi3515、Hi3520、Hi3512、Hi3511、 Hi3510,前一段时间成都打人男司机所使用的盯盯拍 M5S 行车...
九安品牌安防监控设备硬盘录像机HI3531_16路D1产品参数
JUAN_HI3531-16 项目规划 编号 : HW-GEEK-028 版本 : 1.0 页次: 1/ 3 主板命名:JA-HI3531_V1.2 主板主要芯片组 厂家 CPU DDR3 PHY DECODER FLASH ...
升级方案
目录结构如下: MCU-BOOT-XXXXX MCU-UPDATE-XXXXX Keyboard MCU-APP-XXXXX Version MCU-FPGA-XXXXX Current Hi3531-FPGA-XXXXX Version-table.txt 程序框图如下 ...
吉瑞特NVR快速操作指南
1.1. 适用型号本手册适用于以下产品: 产品型号 Hi3515A Hi3520D Hi3521 Hi3531 产品名称 4 路 NVR 8 路 NVR 16 路 NVR 32 路 NVR 1.2. 声明 ? ...
更多相关标签:
hi3531 sdk 百度云盘 | hi3531 sdk 下载 | hi3531 | hi3531 datasheet | hi3531a sdk 百度云 | hi3531a | hi3531与hi3531a区别 | hi3531a datasheet |