设为首页 加入收藏

TOP

hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .(六)
2015-07-24 05:56:29 来源: 作者: 【 】 浏览:48
Tags:hi3531 SDK 编译 文件 系统 制作 jffs2 解决 问题
**************************************
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一类的关键字。一个词汇再未定义之前就使用就会出项这种错误,可以通过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 软件

下载:

ftp://sources.redhat.com/pub/jffs2/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-at

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1061 Rightmost Digit题解 下一篇C++设计模式实现--组合(Composite..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: