一, 安装SDK

1、Hi3531 SDK包位置

在"Hi3531_V100R001***/01.software/board"文件夹下,您能够看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件。

该文件就是Hi3531的软件开发包。

2、解压缩SDK包

在linuxserver上(或者一台装有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、在linuxserver上安装交叉编译器

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 编译

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_uclibc_slq -l -e 0x10000 --pad=0x9A0000 -o  /slq/tftpboot/rootfs_slq9856k_slq3.17

25216k

sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc_slq -l -e 0x10000 --pad=0x18A0000 -o osdrv/pub/rootfs_25216kslq.jffs2

sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc_slq -l -e 0x10000 --pad=0x18A0000 -o  /slq/tftpboot/rootfs_slq25216k_slq3.17

或者

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

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)使用某一工具链编译后,假设须要更换工具链,请先将原工具链编译文件清除。然后再更换工具链编译。

(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。

将生成的文件系统刷到目标板上,发现网卡驱动载入不上,把 /hitoe/stmmac.ko 用之前能用的文件系统里的替换掉,又一次生成的文件系统载入后就能够用了.

四, 设置网卡,挂载NFS文件夹

 ifconfig eth0 hw ether 00:00:23:34:45:66;

ifconfig eth0 192.168.0.133 netmask 255.255.255.0;

route add default gw 192.168.0.1;ifconfig;

ping 192.168.0.233



挂载NFS文件夹

mount -t nfs -o nolock 192.168.0.233:/home/ls/nfs  /mnt/slq                                           

mount -t nfs -o nolock 192.168.1.210:/home/ks/hi3531/nfs_3531  /mnt

tftp 192.168.1.210 -l test –g

tftp 192.168.1.210 -l a1.264 –p


五, 制作并载入第2个文件系统

1. 创建一个空目录

root@ubuntu:/slq/local/Hi3531_SDK_V1.0.B.0/osdrv/pub# mkdir rootfs_custom_slq

2. 用这个空目录做一个1M大小的jffs2文件系统镜像

ls@ubuntu:/slq/local/Hi3531_SDK_V1.0.B.0$ 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

3. 将镜像刷到板子上

//custom

mw.b 0x82000000 0xff 0x100000; tftp 0x82000000 fs_custom_64k_slq; sf probe 0; sf erase 0xf00000 0x100000; 

sf write 0x82000000 0xf00000 $(filesize); save;reset

4. 这里不知道怎么回事,  用tftp下载时原文件名称为 fs_custom_64k_slq.jffs2 时就会找不到这个文件,将 .jffs2去掉就能够了.也可能是把生成的文件系统镜像放到 /slq/tftpboot 文件夹后要对文件重命名,加入权限的原因 .

5. 重新启动后进入文件系统,查看flash分区

# cat /proc/mtd

dev:    size   erasesize  name

mtd0: 00060000 00010000 "uboot"

mtd1: 00020000 00010000 "uboot_logo"

mtd2: 00040000 00010000 "config"

mtd3: 004a0000 00010000 "kernel"

mtd4: 009a0000 00010000 "rootfs"

mtd5: 00100000 00010000 "custom"

6. 创建一个文件夹 /slq, 并将 custom 分区挂载到 /slq 文件夹下,

# mkdir /slq

# mount -t jffs2 /dev/mtdblock5 /slq



# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/root                 9856      4336      5520  44% /

tmpfs                    61596         4     61592   0% /dev

/dev/mtdblock5            1024       196       828  19% /slq

7. 改动开机自己主动挂载和网卡配置

在 /etc/profile 中加入几行:

#slq

mount -t jffs2 /dev/mtdblock5 /slq

ifconfig eth0 hw ether 00:00:23:34:45:66;

ifconfig eth0 192.168.0.133 netmask 255.255.255.0;

route add default gw 192.168.0.1;

之后 能够在板子上挂载NFS

mount -t nfs -o nolock 192.168.0.233:/home/ls/nfs /mnt/ls



网卡配置最好在

/etc/init.d/S80network 中单独配置

六, 问题解决等

1.备份文件系统

mw.b 0x81000000 0xff 0x9a0000; sf probe 0; sf read 0x81000000 0x560000 0x9a0000;tftp 0x81000000 sdkfs9856k 0x9a0000

文件系统大小, 9856k=0x9a0000 , 从 5504k=0x560000 处開始 ,  保存到tftp 文件夹,文件名称为 sdkfs9856k

2.  文件系统做好之后网卡不能配置

开机日志中[RCS]: /etc/init.d/S81toe 执行出错,原因是网卡驱动 /hitoe/stmmac.ko不能载入

用备份中已经可用的网卡驱动将其替换,执行成功

可能是由于网卡驱动默认使用第一个网口,可是我用的板子使用的是第二个网口

eth0: PHY ID 001cc915 at 0 IRQ 0 (1:00)

eth0: PHY ID 001cc915 at 2 IRQ -6 (1:02) active

这里应该是第二个网口可用 ,以下是相关开机日志

VFS: Mounted root (jffs2 filesystem) on device 31:4.

Freeing init memory: 184K





            _ _ _ _ _ _ _ _ _ _ _ _

            \  _  _   _  _ _ ___

            / /__/ \ |_/

           / __   /  -  _ ___

          / /  / /  / /

  _ _ _ _/ /  /  \_/  \_ ______

___________\___\__________________





[RCS]: /etc/init.d/S00devs

[RCS]: /etc/init.d/S01udev

Jan  1 00:00:03 udevd (591): /proc/591/oom_adj is deprecated, please use /proc/591/oom_score_adj instead.

udevd[591]: main: error opening /dev/null: No such file or directory

[RCS]: /etc/init.d/S80network

[RCS]: /etc/init.d/S81toe

STMMAC driver:

platform registration... 

done!

Set system config register 0x200300ec with value 0x003f003f

done!

DWMAC1000 - user ID: 0x10, Synopsys ID: 0x36

Enhanced descriptor structure

MACADDR in get is 0:0:0:0:0:0

no valid MAC address for MAC 0;please, use ifconfig or nwhwconfig!

eth0 - (dev. name: stmmaceth - id: 0, IRQ #119

IO base addr: 0xc89c0000)

STMMAC MII Bus: probed

eth0: PHY ID 001cc915 at 0 IRQ 0 (1:00)

eth0: PHY ID 001cc915 at 2 IRQ -6 (1:02) active

DWMAC1000 - user ID: 0x10, Synopsys ID: 0x36

Enhanced descriptor structure

MACADDR in get is 0:0:0:0:0:0

no valid MAC address for MAC 1;please, use ifconfig or nwhwconfig!

eth1 - (dev. name: stmmaceth - id: 0, IRQ #119

IO base addr: 0xc89c4000)

eth1: PHY ID 001cc915 at 0 IRQ 0 (1:00)

eth1: PHY ID 001cc915 at 2 IRQ -6 (1:02)

stmmac_reset: RESET COMPLETE!





**************************************************

*  TNK driver built on Mar 17 2013 at 14:17:12

*  TNK driver mode is BYPASS

**************************************************

stmmac: Rx Checksum Offload Engine supported

stmmac: Rx Checksum Offload Engine supported

Auto login as root ...

Jan  1 00:00:03 login[631]: root login on 'ttyS000'

Welcome to HiLinux.

MACADDR in set is 0:0:23:34:45:66

PHY: 1:02 - Link is Up - 100/Full

3. 执行一下mpp/sample/hifb里的sample_hifb測试程序,出现错误

# pwd

/mnt/mpp/sample/hifb_bak

# ./sample

./sample: can't load library 'libz.so.1'

原因是系统变量的库文件夹中没有这个库,在文件系统中查找这个库

# find / -name libz.so.1

/mnt/mpp/sample/hifb/lib/libz.so.1

/mnt/mpp/sample/hifb_bak/lib/libz.so.1

/mnt/mpp/sample/hifb_for/lib/libz.so.1

/mnt/qt/lib/libz.so.1

/mnt/lib/libz.so.1

缺少库文件,在配置文件 /etc/profile 中库路径中加入  :/mnt/mpp/sample/hifb/lib

LD_LIBRARY_PATH="/mnt/ls/qt/lib:/usr/local/lib:/usr/lib:/mnt/mpp/sample/hifb_bak"

:/mnt/mpp/sample/hifb_bak  为加入部分

执行 source /etc/profile 执行配置脚本使其生效

4.   这时候执行一下mpp/sample/hifb里的sample_hifb測试程序,仍出现错误

hifb.ko 驱动无法载入

解决方法

将sdk 中的(不是备份中的,其它版本号也可能不兼容) mpp/ko文件夹下驱动放到 板子的 /home/decoder/ko_hi3531 文件夹下,并将 文件夹下中的 load3531 脚本用 备份中已经改动过的版本号取代,然后在配置脚本 /etc/profille 中加入例如以下行

进入驱动文件夹, 运行 load3531 脚本加入相关驱动,返回到原来的文件夹中

cd /home/decoder/ko_hi3531;         

./load3531                     

cd -

5【错误总结】expected specifier-qualifier-list before sth

在使用GCC时常常会遇到expected specifier-qualifier-list before
sth之类的错误。specifiers是指void、char、struct Foo等词汇。qualifiers是指像const和volatile一类的keyword

一个词汇再未定义之前就使用就会出项这样的错误,能够通过typedef进行定义以后再使用。

我的程序里是缺少结构体 HIFB_LAYER_ID_E 的定义,加入上问题就攻克了。

typedef enum 

{

    HIFB_LAYER_0 = 0x0,

    HIFB_LAYER_1,

    HIFB_LAYER_2,

    HIFB_LAYER_3,    

    HIFB_LAYER_4,

    HIFB_LAYER_CURSOR_0,

    HIFB_LAYER_CURSOR_1,

    //HIFB_LAYER_CURSOR,

    HIFB_LAYER_ID_BUTT

} HIFB_LAYER_ID_E;

以下是网上的资料

hi3531自带的SDK已经有了,自己装的反而可能不兼容

安装 mkfs.jffs2 软件

下载:

或者使用命令:
apt-get install mtd-utils

2.   挂载、制作jffs2文件系统

在这里,为了避免又一次制作文件系统,我採用了备份的jffs2文件系统hi3531_rootfs_9856k.jffs2。

在整个制作jffs2文件系统的过程中,我们採用root权限。

2.1.   挂载文件系统镜像

jffs2文件系统不是块设备,不能直接mount,须要做一些中间步骤。首先,内核必须支持MTD,而且编译了mtdram、mtdblock这两个模块。先先建立一个大于等于要挂载的文件系统的虚拟mtd设备。

hi3531_rootfs_9856k.jffs2文件系统为9856k,那么我先建立一个大于等于9856k的虚拟mtd设备。(为了避免制作过程其中向文件系统里边加入大文件。我将mtd大小设置为9856K)

$ sudo modprobe mtdram total_size=9856

当中。total_size的单位是KB。指定mtd的大小。

载入mtdblock产生虚拟块设备并把hi3531_rootfs_9856k.jffs2的内容写入生成的虚拟设备中:

$ sudo modprobe mtdblock

$ sudo dd if=/slq/tftpboot/hi3531_rootfs_9856k.jffs2 of=/dev/mtdblock0

(注:dd命令是指定大小的块复制文件,并在拷贝的同一时候进行指定的转换。if=file:输入文件名称,缺省为标准输入。of=file:输出文件名称。缺省为标准输出。

创建挂载点:

$mkdir /mnt/mtd

如今就能够mount了:

$ sudo mount -t jffs2 /dev/mtdblock0 /mnt/mtd

进入/mnt/mtd之后就可以对文件系统进行改动!

sudo mount -t hi3531_rootfs_9856k /dev/mtdblock0 /mnt/mtd

sudo mkfs.jffs2 -r jffs2test1 -o fstest_slq14.3.04.jffs2 -e 0x20000 --pad=0x9A0000 -s 0x800 –n -l

sudo mkfs.jffs2 -r mtd -o fstest_slq14.3.04.jffs2 -e 0x10000 --pad=0x9A0000 -s 0x800 –n -l

sudo mkfs.jffs2 -r mtd -o fstest_slq14.3.04.jffs2 -e 0x10000 --pad=0x9A0000 -s 0x800 -l

sudo mkfs.jffs2 -r mtd -o fsbusybox_slq14.3.05.jffs2 -e 0x10000 --pad=0x9A0000 -s 0x800 -l

sudo mkfs.jffs2 -r fscontentbak.jffs2 -o fsbusybox64k2k_slq14.3.05.jffs2 -e 0x10000 --pad=0x9A0000 -s 0x800 -l

说明:
页大小0x1000   4k

块大小0x40000  256k

64k=0x10000 的块大小 block size

2k =0x800      的页大小 page size

2.   挂载、制作jffs2文件系统

在这里,为了避免又一次制作文件系统,我採用了英蓓特公司的MBS-SAM9G45开发板自带的jffs2文件系统Angstrom-x11-image-demo-glibc-at91.rootfs.jffs2。在整个制作jffs2文件系统的过程中,我们採用root权限。

2.1.   挂载文件系统镜像

jffs2文件系统不是块设备,不能直接mount,须要做一些中间步骤。首先,内核必须支持MTD,而且编译了mtdram、mtdblock这两个模块。先先建立一个大于等于要挂载的文件系统的虚拟mtd设备。

Angstrom-x11-image-demo-glibc-at91.rootfs.jffs2文件系统为28.2M。那么我先建立一个大于等于28.2M的虚拟mtd设备。

(为了避免制作过程其中向文件系统里边加入大文件,我将mtd大小设置为50M*1024=50720K)

$ sudo modprobe mtdram total_size=50720

当中,total_size的单位是KB,指定mtd的大小。

载入mtdblock产生虚拟块设备并把Angstrom-x11-image-demo-glibc-at91.rootfs.jffs2的内容写入生成的虚拟设备中:

$ sudo modprobe mtdblock

$ sudo dd if=/home/Embest_SAM9G45/Angstrom-x11-image-demo-glibc-at91.rootfs.jffs2 of=/dev/mtdblock0

(注:dd命令是指定大小的块复制文件,并在拷贝的同一时候进行指定的转换。if=file:输入文件名称,缺省为标准输入。of=file:输出文件名称,缺省为标准输出。

创建挂载点:

$mkdir /mnt/mtd

如今就能够mount了:

$ sudo mount -t jffs2 /dev/mtdblock0 /mnt/mtd

进入/mnt/mtd之后就可以对文件系统进行改动!

2.2.  制作jffs2文件系统镜像

改动(在后边一步讲)好自己的文件系统后,退到已做好的文件系统文件夹的上一级。比方我的文件系统的挂载点是/mnt/mtd,则退到/mnt文件夹下。用mkfs.jffs2工具制作jffs2文件系统,例如以下:

#mkfs.jffs2 -r rootfs -o fs.jffs2 -e 0x20000 --pad=0x500000 -s 0x800 –n -l

就可以生成 rootfs.jffs2

Mkfs.jffs2各參数的意义例如以下:

-r:指定要做成image的文件夹名。

-o:指定输出image的文件名称。

-e:每一块要擦除的block size,默认是64KB.要注意,不同的flash, 其block size会不一样,三星的K9F2G08U0A的block size为0x20000(从其datasheet里能够找到)。

在没有加-e选项是,启动会出现下面错误:at91sam user.warn kernel: Empty flash at 0x00f0fffc ends at 0x00f10000。因此。若有类似的错误,加上-e选项,并配置nandflash的块大小,就可以消除。

--pad(-p):用16进制来表示所要输出文件的大小,也就是fs.jffs2的大小,假设实际大小不足此设定的大小。则用0xFF补足。也能够不用此选项,生成的文件系统的大小跟本身大小一致,临时还不知道有和妙用,可是加上后会少出现非常多错误。

-n。-no-cleanmarkers:指明不加入清楚标记(nandflash有自己的校检块,存放相关的信息)。假设挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0的警告,则加上-n就会消失。

-l,--little-endian:指定使用小端格式。

-s,  指明页的大小,默认是4k=0x1000,我们使用的nandflash的页的大小为2048字节=2k=0x800。

还有的选项,不须要了。能够自己看帮助!用例如以下命令mkfs.jffs2 –h。

hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决这个问题 .的更多相关文章

  1. hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

    一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx. ...

  2. 从零开始制作jffs2文件系统

    JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用. 1.       安装mkfs工具 MTD主页:htt ...

  3. jffs2和yaffs2文件系统制作工具的编译与使用

    一 . 先准备文件 mtd-utils-1.4.5.tar.bz2 ftp://ftp.infradead.org/pub/mtd-utils/ zlib-1.2.5.tar.bz2 http://z ...

  4. jffs2根文件系统制作

    http://www.eetop.cn/blog/html/98/510998-20964.html 作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM公司授权ATC讲师. JFFS2是Flash上应用 ...

  5. Linux 4.10.8 根文件系统制作(二)---制作jiffs文件系统

    一.制作jiffs文件系统 制作jffs2 文件系统需要用到 mkfs.jffs2工具. 执行命令: mkfs.jffs2 -n -s 0x800 -e 0x20000  --pad=0x800000 ...

  6. am335xSD卡启动--文件系统制作

    1.网上下载busybox工具https://busybox.net/downloads/ 2.根据此文章提示制作自己的跟文件系统 链接: https://pan.baidu.com/s/1bp6GK ...

  7. jffs2文件系统制作

    内核:                linux-3.0 uboot:             2010.09 开发板:             fl2440 交叉编译器:         2011. ...

  8. linux根文件系统制作之busybox编译和系统构建【转】

    转自:http://blog.chinaunix.net/uid-29401328-id-5019660.html 介绍完相关文件后我们开始构建文件系统,涉及到的文件等到具体用到的时候再讲. 一.编译 ...

  9. 已有 JFFs2文件系统的修改

    项目应用中,对于前人留下的JFFS2的文件,有时候我们需要修改,但是苦于没有源文件,实际操作很多时候无所适从.每次支持生产之后再进行人为的升级.这样费时费力,也给生产人员增加了负担. 为了解决这个问题 ...

随机推荐

  1. 一套出完被喷爆的noip提高组+的题目

    这是一个悲伤的故事. 校内胡测嘛,这当然的重视啦,好好地出完题,看题面不是很难哦,那就用它吧. 结果今天老师考试就用上了(情况不妙) 果然考试过程中就有打喷嚏的冲动. 一道暴力,一道概率DP,一道主席 ...

  2. Informatica抽取SQL Server数据库乱码

    1.首先确认数据库的关系连接所使用的代码页,是否一致 2.如果上述方法不行,在Designer中更改数据类型,将string类型改为nstring类型,中文就没有乱码了 3.SQL Server数据库 ...

  3. Shell流程语句

    1. shell流程控制 流程控制是改变程序运行顺序的指令.linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case). 2. if ...

  4. webpack 之 缓存处理

    针对 这里 的所提到的观点,如果webpack每次都生成相同名字的bundle.js,会导致问题.这里使用webpack的文件hash功能来解决,简简单单地为输出文件添加一个“[hash]”即可. / ...

  5. CSS3---渲染属性

    1.计数器 CSS3计数器( CSS Counters )可以允许我们使用css对页面中的任意元素进行计数,实现类似于有序列表的功能.与有序列表相比,它的突出特性在于可以对任意元素计数,同时实现个性化 ...

  6. 【练习】reserving.kr 之imageprc write up

    补充:c++ builder 与 windows  API经典范例 #include <vcl.h> #pragma hdrstop #include "Unit1.h" ...

  7. [图文教程] 使用Git 提交项目到码云

    目录 1. 环境准备 2. 开发工具配置Git和SSH 3. 配置SSH到码云 4. 创建一个项目 5. Clone项目到本地 6. Push项目到码云 1. 环境准备 1.1 本机配置Git Hom ...

  8. 大数据学习——关于hive中的各种join

    准备数据 2,b 3,c 4,d 7,y 8,u 2,bb 3,cc 7,yy 9,pp 建表: create table a(id int,name string) row format delim ...

  9. bzoj2277 [Poi2011]Strongbox

    2277: [Poi2011]Strongbox Time Limit: 60 Sec  Memory Limit: 32 MBSubmit: 498  Solved: 218[Submit][Sta ...

  10. 【bzoj1042】[HAOI2008]硬币购物-递推与动规-容斥原理

    硬币购物 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一行 c1,c2 ...