1、 Hi3518A/Hi3518C/Hi3516C Linux开发环境 用户指南 文档版本 00B30 发布日期 2012-12-25 版权所有 深圳市海思半导体有限公司2012。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 商标声明 、 、海思和其他海思商标均为深圳市海思半导体有限公司的商标。 本文档提及的其他所有商标或注册商标,由各自的所有人拥有。 注意 您购买的产品、服务或特性等应受海思公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,海思公司对本文档内容
2、不做任何明示或默示的声明或保证。 由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。 深圳市海思半导体有限公司 地址: 深圳市龙岗区坂田华为基地华为电气生产中心 邮编: 518129 网址: http:/ 客户服务电话: +86-755-28788858 客户服务传真: +86-755-28357515 客户服务邮箱: Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 前 言文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半
3、导体有限公司 i前 言 概述 本文档介绍 Linux 开发环境。 Linux 开发环境的搭建、 HiBoot、 Linux 内核、根文件系统以及内核和根文件系统的烧写,以及创建网络开发环境和如何启动 Linux 开发应用程序。 本文档主要提供让客户更快地了解 Linux 开发环境指导。 产品版本 与本文档相对应的产品版本如下。 产品名称 产品版本 Hi3518A 芯片 V100 Hi3518C 芯片 V100 Hi3516C 芯片 V100 读者对象 本文档(本指南)主要适用于以下工程师: z 技术支持工程师 z 软件开发工程师 修订记录 修订记录累积了每次文档更新的说明。最新版本的文档包含以
4、前所有文档版本的更新内容。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 前 言文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 ii修订日期 版本 修订说明 2012-12-26 00B30 补充 Hi3516C 的信息。 第 2 章 U-boot 删除原 2.3 编译 U-boot 章节。 第 3 章 Lniux 3.2 配置内核中新增编译参数 CROSS_COMPILE 及 2 种工具链的相关说明。 2012-11-25 00B20 第 3 章 Lniux 3.2 配置内核和 3.3 编译内核并生成内
5、核镜像 uImage 中描述更新。 2012-08-30 00B10 第 2 次版本发布。 2012-08-15 00B01 第 1 次临时版本发布。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 目 录文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 iii目 录 1 开发环境 1 1.1 嵌入式开发环境 . 1 1.2 Linux 开发环境 . 2 1.3 搭建 Linux 开发环境 . 3 1.3.1 安装 Linux 服务器 3 1.3.2 安装交叉编译工具 3 1.3.3 安装 SDK 3 2 U
6、-boot 5 2.1 U-boot 简介 . 5 2.2 启动 U-boot 5 2.3 烧写 U-boot 6 2.4 U-boot 常用命令 . 6 2.5 U-boot 环境变量 . 13 3 Linux 内核 . 16 3.1 内核源代码 . 16 3.2 配置内核 . 16 3.3 编译内核并生成内核镜像 uImage 17 4 根文件系统 18 4.1 根文件系统简介 . 18 4.2 利用 busybox 制作根文件系统 . 19 4.2.1 获取 busybox 源代码 19 4.2.2 配置 busybox . 19 4.2.3 编译和安装 busybox . 20 4.2
7、.4 制作根文件系统 20 4.3 文件系统简介 . 21 4.3.1 JFFS2 21 4.3.2 NFS . 22 4.3.3 YAFFS2 . 23 4.3.4 SquashFS 23 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 目 录文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 iv5 烧写内核和根文件系统 . 25 5.1 存储器地址空间 . 25 5.2 通过网口烧写 . 25 5.2.1 参数设置和建立 tftp 服务 25 5.2.2 下载内核 . 26 5.2.3 下载根文件系统 2
8、6 5.3 通过串口烧写 . 28 5.3.1 连接设备 . 28 5.3.2 下载内核 . 28 5.3.3 下载根文件系统 29 6 启动 Linux 31 6.1 设置启动参数以及自动启动方式 . 31 7 应用程序开发简介 . 33 7.1 编写代码 . 33 7.2 运行应用程序 . 33 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 插图目录文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 v插图目录 图 1-1 嵌入式开发图例 . 1 图 1-2 Linux 开发环境 2 图 4-1 根文件系
9、统顶层目录结构图 18 图 5-1 串口设置 . 28 图 5-2 发送文件窗口 . 29 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 表格目录文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 vi表格目录 表 1-1 Linux 开发环境的各部分软件描述 2 表 2-1 U-boot 常用命令说明 6 表 2-2 NAND Flash 命令说明 9 表 2-3 SPI Flash 命令说明 11 表 2-4 U-boot 常用环境变量说明 13 表 4-1 嵌入式系统中可忽略的目录说明 19 表 4-2
10、 JFFS2 参数表 . 22 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 1 开发环境文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 11 开发环境 Hi3518A、Hi3518C及Hi3516C Linux开发环境的相关原理和操作基本一致。与芯片相关的操作本文后面的均以Hi3518A为例进行说明。 1.1 嵌入式开发环境 由于嵌入式单板的资源有限,不能在单板上运行开发和调试工具,通常需要交叉编译调试的方式进行开发和调试,即“宿主机目标机(评估板) ”的形式。宿主机和目标机一般采用串口连接,也可同时通
11、过网口或者 JTAG 连接,如 图 1-1 所示。 宿主机和目标机的处理器一般不相同。宿主机需要建立适合于目标机的交叉编译环境。程序在宿主机上经过“编译连接定位”得到可执行文件。通过一定的方法将可执行文件烧写到目标机中,然后在目标机上运行。 目标机上的 Bootloader 启动后,目标机中的操作信息通过串口或者网口输出到宿主机上显示。在宿主机上的控制台中输入命令,可以控制目标机。 图1-1 嵌入式开发图例 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 1 开发环境文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有
12、限公司 21.2 Linux开发环境 Linux 开发环境通常包括 Linux 服务器、 Windows 工作台和 DMEB(目标板) ,三者同处于一个网络中,如 图 1-2 所示。 图1-2 Linux开发环境 在 Linux 服务器上建立交叉编译环境, Windows 工作台通过串口和网口与单板连接,开发人员可以在 Windows 工作台中进行程序开发或者远程登录到 Linux 服务器进行程序开发。各部分具体软件介绍如 表 1-1 所示。 开发环境中使用了Windows工作台,实际上很多工作也可以在Linux服务器上完成,如使用minicom代替超级终端等,用户可自行选择。 表1-1 Li
13、nux开发环境的各部分软件描述 软件 描述 Windows 工作台 操作系统 Windows 98/me/2000/XP。 应用软件 putty、超级终端、 tftp 服务器、 ADS/RealView Debugger 等软件。 Linux 服务器 操作系统 无特别要求,可为 Redhat、 Debian 等。内核版本支持 2.6.18 及以上版本。安装时建议选择完全安装。 应用软件 NFS、 telnetd、 samba、 VIM、 arm 交叉编译环境( Gcc 版本 4.4.1)等。 其他应用软件根据具体开发需要而定,通常系统都已默认安装,只要适当配置即可。 目标板 引导程序 U-bo
14、ot。 操作系统 Hisilicon Linux(简称 HiLinux)。 HiLinux 内核基于 Linux 标准内核 3.0.y 版本移植开发,根文件系统基于 busybox 1.16.1 版本制作而成。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 1 开发环境文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 3软件 描述 应用软件 包含 telnetd、 gdb server 等 Linux 常用命令。 程序开发库 uClibc-0.9.32.1 版本; glibc-2.11.1 版本。 1.3
15、搭建Linux开发环境 1.3.1 安装Linux服务器 建议选择常用的 Linux 发行版,便于寻找各类技术资源。例如: z RedHat 较新的发行版如 RedHat Fedora Core 系列和 Redhat Enterprise Linux、 Red Hat 3.4.4-2。 z RedHat 较老的发行版如 RedHat 9.0 等。 推荐使用较新版本,以方便获取各类资源,如 Fedora Core 系列、 SUCE10、 Ubuntu9。 Debian 的各类发行版也是常用的。使用 Debian 的好处是各类安装包都可以随时在线更新,各类软件包资源也很丰富。 1.3.2 安装交叉
16、编译工具 使用从网络等渠道得到的交叉编译工具可能存在与使用的内核并不配套,造成开发过程中出现一些不可预料的问题。 可以使用从其它渠道得到的 ARM 交叉编译工具(如:网络下载) ,用户需要熟悉交叉编译环境的安装及使用过程,建议解压 SDK 中工具链的压缩包,然后使用 sudo 或root 权限执行 cross.install 即可完成安装。 1.3.3 安装SDK Hi3518C和Hi3516C的SDK软件安装包包名都是Hi3518_SDK_VXX.tgz(XX是版本号)。 Hi3518A SDK 是基于 Hi3518A DMEB 的软件开发包,包含了在 Linux 相关应用开发时使用的各种工
17、具及其源代码,是用户开发中最基本的软件平台。将 Hi3518A SDK 安装到 Linux 服务器中的步骤如下: 1. 拷贝。将 Hi3518_SDK_VXX.tgz( XX 是版本号)拷贝到 Linux 服务器上。 2. 解压。解压文件,使用命令: tar zxf Hi3518_SDK_VXX.tgz。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 1 开发环境文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 43. 如果过程中没有提示信息,请等待命令执行完毕。 4. 安装。解压完成后,进入 Hi3518
18、_SDK_VXX 目录,执行 ./ sdk.unpack,执行完毕后安装成功。 如果用户没有 root 权限,安装过程中必要的时候会提示输入 root 密码或 sudo 密码。 -结束 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 52 U-boot 2.1 U-boot简介 U-boot 是在 U-boot-2010.06 基础上进行开发的。 Bootloader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以实现以下功能:
19、 z 初始化硬件设备。 z 建立内存空间的映射图。 z 使系统的软硬件环境处于一个合适的状态,为最终调用操作系统内核准备好正确的环境。 U-boot 除了作为一个 Bootloader 外,还是一个烧写器。在 U-boot 下,可以通过串口、网口下载 Linux 内核或者应用程序到内存或 Flash 中。 如无特别说明,本文中U-boot是包含SPI Flash、NAND Flash两种启动合一的版本,它们的启动、编译和烧写过程大致相同,涉及到的命令和环境变量略有不同,具体请参见“2.4 U-boot常用命令”和“2.5 U-boot环境变量”。 2.2 启动U-boot 给 Hi3518A
20、DMEB 上电后,在控制台上出现命令提示符。 Hi3518A DMEB 的标准输入、标准输出重定位到 UART0。 UART0 连接到调试主机( Host)上,调试主机是Windows 工作台,采用超级终端(如果调试主机是 Linux 服务器,采用 MiniCOM) 。UART0 的连接设置为: z 波特率: 115200 z 数据位: 8 z 奇偶校验:无 z 停止位: 1 z 流控:无 系统上电后,控制台上有如下类似的信息显示,表示 U-boot 已经启动: U-Boot 2010.06 (Mar 31 2011 - 16:27:04) Hi3518A/Hi3518C/Hi3516C Li
21、nux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 6DRAM: 1 GiB NAND: Special Nand id table Version 1.21 Nand ID: 0xAD 0xDC 0x80 0x95 0xAD 0xDC 0x80 0x95 Nand(Hardware): Block:128K Page:2K Ecc:1bit Chip:512M OOB:64Byte 512 MiB In: serial Out: serial Err: serial hisilicon # 2.3
22、 烧写U-boot 编译和烧写 U-boot 的具体内容请参见 Hi3518A/Hi3518C/Hi3516C U-boot 移植应用指南 。 2.4 U-boot常用命令 U-boot 常用命令的描述如 表 2-1 所示。 z U-boot支持命令自动补齐,当输入命令的部分字母时,按下Tab键,系统将自动补齐或者列出可能的命令列表。 表2-1 U-boot常用命令说明 命令 描述 ? 得到所有命令列表或者列出某个命令的帮助。 用法:? command . 说明:列出命令的帮助信息。当不带参数时,列出所有命令及简要说明。 help help 同 ? 。 printenv 打印环境变量。 用法:
23、 printenv name . 说明:打印环境变量。当不带参数时,打印所有变量。 setenv 设置或者删除变量。 用法: setenv name value 说明: name 一般是 U-boot 环境变量的名字,也可以是用户自定义的变量。当 value 为空时,删除变量“ name”,否则设置变量“ name”,且值为“ value”。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 7命令 描述 saveenv 保存变量。 用法: sa
24、veenv 说明:保存变量及其值至 Flash。 ping 用于简单判断目的主机网络状态或本机网络工作状态。 用法: ping 说明: ipaddr 表示目的主机的 IP。当网络工作正常时,结果显示“ host is alive”,否则显示“ ping failed;host is not alive”。 loadb 通过串口 Kermit 协议下载二进制文件。 用法: loadb addr baud 说明: addr 参数为存储文件的地址, baud 为串口下载速率。输入命令后,在超级终端的菜单中选择 传送 /发送文件 ,在弹出的窗口中,协议必须选择“ Kermit”。 例子: loadb
25、0x82000000 115200 注意:使用 loadb,只能下载到内存中,不能直接下载到 Flash。 tftp 从 tftp 服务器中下载文件至内存中。 用法: tftp addr file 说明:将 file 文件下载到地址为 addr 的内存中。 注意:使用 tftp 时,必须先设置好网络配置,使用 setenv 配置 ipaddr、netmask、 serverip 参数。 例: hisilicon setenv ipaddr 192.168.1.1 /*设置 IP地址 */ hisilicon setenv netmask 255.255.254.0 /*设置子网掩码 */ hi
26、silicon setenv serverip 192.168.1.254 /*设置服务器地址 */ hisilicon tftp 0x82000000 uImage 说明:把 tftp 服务器( IP 为环境变量中设置的 serverip)中 uImage 通过tftp 写入到内存 0x82000000 处。 cp 拷贝内存。 用法: cp .b,.w,.l source target count 说明:从内存地址 source 中拷贝到 target,大小为 count。实际拷贝的大小,因命令的不同而不同。 使用 cp.b,拷贝 1%count 个字节。 使用 cp.w,拷贝 2%coun
27、t 个字节。 使用 cp.l,拷贝 4%count 个字节。 简单使用 cp 时,等价于 cp.1。 说明: source 和 target 是 DDR SDRAM 的地址范围。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 8命令 描述 go 跳转到指定地址,执行代码。 用法: go addr arg 说明:执行地址 addr 处的二进制代码,可传递 arg 参数。 bootm 设置运行环境,并开始执行二进制代码。 用法: bootm ad
28、dr arg 说明:执行 addr 地址处的代码,要求二进制代码为 mkimage 处理过的二进制文件。 md 显示内存区的内容。 用法: md .b, .w, .l address 说明:显示地址 address 内存区内容。 使用 md.b,显示单位为 1 字节。 使用 md.w,显示单位为 2 字节。 使用 md.l,显示单位为 4 字节。 简单使用 md 时,等价于 md.l。 mm 修改内存区的内容。地址自动增加。 用法: mm .b, .w, .l address 说明:修改地址 address 内存区内容。 使用 mm.b,每次修改 1 字节。 使用 mm.w,每次修改 2 字节
29、。 使用 mm.l,每次修改 4 字节。 简单使用 mm 时,等价于 mm.l。 nm 修改内存区的内容,地址不自动增加。 用法: nm .b, .w, .l address 说明:修改地址 address 内存区内容。 使用 nm.b,每次修改 1 字节。 使用 nm.w,每次修改 2 字节。 使用 nm.l,每次修改 4 字节。 简单使用 nm 时,等价于 nm.l。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 9命令 描述 mw 填充
30、内存。 用法: mw .b, .w, .l address value count 说明:设置从地址 address 开始的 count 大小的内存为 value。 使用 mw.b,填充内存大小为 1%count 字节。 使用 mw.w,填充内存大小为 2%count 字节。 使用 mw.l,填充内存大小为 4%count 字节。 简单使用 mw 时,等价于 mw.l。 例子: mw.b 0x82000000 FF 10000 说明:把内存 0x82000000 开始的 0x10000 字节设为 0xFF。 cmp 比较两块内存区。 用法: cmp .b, .w, .l addr1 addr2
31、 count 说明:比较地址 addr1 和地址 addr2,大小 count 的内存内容进行比较。 使用 cmp.b,比较大小为 1%count 字节。 使用 cmp.w,比较大小为 2%count 字节。 使用 cmp.l,比较的大小为 4%count 字节。 简单使用 cmp 时,等价于 cmp.l。 注:以上命令必须在同一行内输入。 在 NAND Flash 上的操作,详细信息请参见 表 2-2。 表2-2 NAND Flash命令说明 命令 描述 ? nand 得到所有 nand 命令的帮助。 用法:?nand 说明:列出 nand 命令的帮助信息。 nand info 显示所有 n
32、and 设备的信息。 用法: nand info 举例: nand info 说明:本机输下出如下信息,检测到一个 nand 设备,大小为 128M,块大小为 128K。 输出: Device 0: NAND 128MiB 3,3V 8-bit, sector size 128 KiB Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 10命令 描述 Nand device 查看具体某个 nand 设备的信息。 用法: nand device d
33、evice number 举例: nand device 0 说明:显示设备 0 的说明。 输出:Device 0: NA ND 128MiB 3,3V 8-bit. is now current Nand write 用于向 NAND Flash 中写入数据。 用法:nand write m em_addr start_offset count 举例: tftp 0x82000000 u-boot.bin nand write 0x82000000 0x0 0x100000 说明: tftp 82000000 rootfs-FULL_REL-Flash.yaffs2 扫行完之后,会打印出By
34、tes transferred = 7809760 (702600 hex)。参数 fs_size 需要是 YAFFS2文件系统的实际大小,否则会出错,其它参数含义同 Nand write。 Nand read 从 NAND Flash 中读取数据到内存中。 用法: nand read mem_addr start_offset count 举例: nand read 0x82000000 0x100000 0x130000 说明:将偏移地址为 0x100000 处开始, 0x130000 大小的内容读取到以0x82000000 为起始的内存中。 Hi3518A/Hi3518C/Hi3516C
35、 Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 11命令 描述 Nand erase 用来擦除 NAND Flash。 用法一: nand erase start_offset count 举例: nand erase 0 100000 说明:用来擦除从偏移地址 0x0 开始的 0x100000 大小空间。 用法二: nand erase start_offset 举例: nand erase 0x0 说明:用来擦除 0x0 开始的所有空间,即全部擦除。 Nand bad 用来探测 NAN
36、D Flash 的坏块。 用法: nand bad 举例: nand bad 说明:显示 NAND Flash 中的坏块信息 Nand dump 显示 NAND Flash 的数据信息。 用法: nand dump start_offset 举例: nand dump 0x0 说明:显示偏移地址为 0 开始的 2048Bytes 的数据信息和 64Bytes 的OOB 信息。 内存操作命令如md,mw,mm等对于NAND Flash是不适用的,命令go也是不适用于NAND Flash,因为NAND Flash不支持XIP(Execute In Place)。 在 SPI Flash 上的操作,
37、详细信息请参见 表 2-2。 表2-3 SPI Flash命令说明 命令 描述 ? sf 得到所有 sf 命令的帮助。 用法:?sf 说明:列出 sf 命令的帮助信息。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 2 U-boot文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 12命令 描述 sf probe 初始化 SPI Flash 设备。进入 uboot 后, 注意 :必须先执行该命令,然后才能对 SPI Flash 进行其他操作。 用法: sf probe 0 举例 sf probe 0o 说明
38、:本机输下出如下信息,检测到一个 spi flash 设备,大小为16M,块大小为 256K。 输出: Spi(cs1) ID: 0x20 0x20 0x18 0x00 0x00 0x00 Spi(cs1): Block:256KB Chip:16MB (Name:M25P128) 16384 KiB hi_sfc at 0:0 is now current device sf write 用于向 SPI Flash 中写入数据。 用法:sf write mem _addr start_offset count 举例: tftp 0x82000000 u-boot.bin sf write 0
39、x82000000 0x0 0x100000 Build Options 中注意下面两个选项: *Build BusyBox as a static binary (no shared libs) (arm-hisiv100nptl-linux-) Cross Compiler prefix 其中: z 第一个选项选择是否把 busybox 编译成静态链接的可执行文件。如果选择该选项,编译出来的 busybox 就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项将得到动态链接的 busybox,体积较小,但需要动态库的支持。 z 第二个选项是用于选择 SDK 推荐的交叉编译器,配置好
40、后保存并退出。 欲了解 busybox 各选项含义请参考 busybox 配置帮助。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 4 根文件系统文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 204.2.3 编译和安装busybox 编译和安装 busybox 的具体操作如下: hisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- hisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100
41、nptl-linux- install 编译并安装成功后,在 busybox 目录下的 _install 目录下生成以下目录及文件: drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 bin lrwxrwxrwx 1 linux linux 11 2005-04-22 11:01 linuxrc-bin/busybox drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 sbin drwxr-xr-x 4 linux linux 4096 2005-04-22 11:01 usr 4.2.4 制作根文件系统
42、成功安装 SDK 后,在 osdrv/rootfs_scripts/目录中存放已制作好的根文件系统压缩包rootfs.tgz。 用户如有需要可在 busybox 的基础上制作根文件系统。 制作根文件系统的具体操作步骤如下: 1. hisilicon$mkdir rootfs hisilicon$cd rootfs hisilicon$cp R package/osdrv/ busybox/busybox-1.16.1/_intsall/* . hisilicon$mkdir etc dev lib tmp var mnt home proc 2. 配置 etc、 lib、 dev 目录的必需文
43、件。 a. etc 目录可参考系统 /etc 下的文件。其中最主要的文件包括 inittab、 fstab、 init.d/rcS文件等,这些文件最好从 busybox 的 examples 目录下拷贝过来,根据需要自行修改。 b. dev 目录下的设备文件,可以直接从系统中拷贝过来或者使用 mknod 命令生成需要的设备文件。拷贝文件时请使用 cp R file。 c. lib 目录是存放应用程序所需要的库文件,请根据应用程序需要拷贝相应的库文件。 -结束 完成以上两个步骤,一个完整的根文件系统就生成了。 SDK软件包中已经包括配置好的完整的根文件系统,如果无特别需求,可直接使用。要添加自己
44、开发的应用程序,只需将应用程序和相应的库文件拷贝到根文件系统的对应目录即可。 Hi3518A/Hi3518C/Hi3516C Linux 开发环境 用户指南 4 根文件系统文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 214.3 文件系统简介 嵌入式系统中常用文件系统包括有 SquashFS、 JFFS2、 NFS 以及 YAFFS2。它们的特点如下: z SquashFS 和 JFFS2 具有好的空间特性,很适合嵌入式产品应用。 z SquashFS 为只读文件系统。 z JFFS2 为可读写文件系统。 z NFS 文件系统适用于开发
45、初期的调试阶段。 z YAFFS2 文件系统只用于 NAND Flash。 4.3.1 JFFS2 JFFS2 是 RedHat 的 David Woodhouse 在 JFFS 基础上改进的文件系统,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。 JFFS2 文件系统是日志结构化的可读写的文件系统。 JFFS2 的优缺点如下: z 优点 使用了压缩的文件格式。最重要的特性是可读写操作。 z 缺点 JFFS2 文件系统挂载时需要扫描整个 JFFS2 文件系统,因此当 JFFS2 文件系统分区增大时,挂载时间也会相应的变长。使用 JFFS2 格式可能带来少量的 Flash 空间的浪费。这主要
46、是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小大致是若干个数据段。 JFFS2 的另一缺点是当文件系统已满或接近满时, JFFS2 运行速度会迅速降低。这是因为垃圾收集的问题。 加载 JFFS2 文件系统时的步骤如下: 1. 扫描整个芯片,对日志节点进行校验,并且将日志节点全部装入内存缓存。 2. 对所有日志节点进行整理,抽取有效的节点并整理出文件目录信息。 3. 找出文件系统中无效节点并且将它们删除。 4. 最后整理内存中的信息,将加载到缓存中的无效节点释放。 -结束 由此可以看出虽然这样能有效地提高系统的可靠性,但是在一定程度上降低了系统的速度。尤其对于较大的闪存芯片
47、,加载过程会更慢。 为了使内核支持 JFFS2 文件系统,必须在编译内核时把 JFFS2 的选项加入(我们发布的内核默认已经加入了支持) 。在 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig 后,进入“ File systems” ,选择“ miscellaneous filesystems” ,最后选中其中的“ Journalling Flash File System v2 (JFFS2) support”选项( SDK 里面提供的内核默认已经选择了该文件系统的支持) 。 JFFS2 的制作方法为: Hi3518
48、A/Hi3518C/Hi3516C Linux 开发环境 用户指南 4 根文件系统文档版本 00B30 (2012-12-25) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 22hisilicon$ mkfs.jffs2 -d ./rootfs -l -e 0x20000 -o jffs2-root.img 其中, mkfs.jffs2 工具可以从互联网中下载,也可以在 SDK 包中找到。 rootfs 为之前已经制作好的根文件系统。参数说明如 表 4-2 所示。 表4-2 JFFS2参数表 参数 说明 d 指定根文件系统 l little-endian 小端模式 e Flash 的块大小 o 输出映像文件 4.3.2 NFS 使用 SquashFS 和 JFFS2 时,需要先将根文件系统映像烧入 Flash,系统启动时会从Flash 中加载。但是在系统开发或移植的初期,需要经常修改或者添加应用程序。每修改一次就需要重新烧入一次,这样做不仅耗费时间,而且对 Flash 的寿命会有影响。 NFS 是一种分布式的文件系统,用于共享文件和打印机。它允许用户调用挂载远端的文件系统或设备来实现共享,使用方式与挂载本机的文件系统一样。 NFS 使用“客户服务器”模型。在这种模型中,服务器输出需要共享的目录,客户可通过网络挂载这些目录并访问其中的文件。 使