当前位置: 首页 > news >正文

Jffs2根文件系统制作[转]

Jffs2根文件系统制作

一.     建立目录

[root@qljt1 /]# mkdir /jffs2 /jffs2/rootfs /jffs2/rootfs_build

[root@qljt1 /]# cd /jffs2/rootfs

[root@qljt1 rootfs]# mkdir {bin,dev,etc,usr,lib,sbin,proc,sys,tmp}

[root@qljt1 rootfs]# mkdir  usr/{bin,sbin,lib}

二.     拷贝动态链接库

[root@qljt1 rootfs]#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib

[root@qljt1 lib]# cp -arfv * /jffs2/rootfs/lib/

三.     编译busybox

把busybox-1.15.2.tar.ba2 放到 /jffs2/rootfs_build目录下,转到该目录

[root@qljt1 rootfs_build]# tar -xjvf busybox-1.15.2.tar.bz2

[root@qljt1 rootfs_build]# cd busybox-1.15.2

[root@qljt1 busybox-1.15.2]# vi Makefile

修改下面两行

ARCH ?= arm

CROSS_COMPILE ?=/usr/local/arm/4.3.2/bin/arm-linux-  (这个视你的交叉编译工具所在路径而定)

[root@qljt1 busybox-1.15.2]# make menuconfig

       Busybox Settings  --->

           Build Options  ---> 

  | +-------------------------------------------------------------------------+ |

  | | [*] Build BusyBox as a static binary (no shared libs)                  |

  | | [ ] Force NOMMU build                                                   | |

  | | [*] Build with Large File Support (for accessing files > 2 GB)          | |

  | | ()  Cross Compiler prefix                                               | |

  | | ()  Additional CFLAGS

Installation Options  --->

  | | [*] Don't use /usr                                                   |

  | | (./_install) BusyBox installation prefix         (进入这一项)

       填入 /jffs2/rootfs

       这样编译好的busybox,安装以后就会自动保存到 /jffs2/rootfs目录下,不用复制了。

保存退出

[root@qljt1 busybox-1.15.2]# make ;make install

 

四.          编译bash

把bash-3.2.tar.gz 放到 /jffs2/rootfs_build目录下,转到该目录

[root@qljt1 rootfs_build]# tar -xzvf bash-3.2.tar.gz

[root@qljt1 rootfs_build]# cd bash-3.2

[root@qljt1 bash-3.2]# ./configure --host=arm-linux

[root@qljt1 bash-3.2]#make

[root@qljt1 bash-3.2]# arm-linux-strip bash

[root@qljt1 bash-3.2]# cp bash /jffs2/rootfs/bin/

 

五.          建立配置文件

1.       etc/inittab 文件

[root@qljt1 bash-3.2]# cd /jffs2/rootfs

[root@qljt1 rootfs]# vi etc/inittab

添加如下内容

#first: run the system script file

::sysinit:/etc/init.d/rcS

#second:run the local script file

::once:/etc/rc.local

#third run the bash shell prosecc

::respawn:/bin/bash

#restart init process

::restart:/sbin/init

#umount all file system

::shutdown:/bin/umount -a –r

保存退出

[root@qljt1 rootfs]# chmod 777 etc/inittab

上面的这个inittab文件决定的启动流程是:

    (1) 执行“/etc/init.d/rcS”脚本;

    (2) 执行“/etc/rc.local”脚本;

    (3) 执行“/bin/bash”交互程序,进入交换界面;

2.       etc/init.d/rcS文件

[root@qljt1 rootfs]# mkdir etc/init.d

[root@qljt1 rootfs]# vi etc/init.d/rcS

内容:

#!/bin/sh

 

#mount fs

 

/bin/mount  -t  ramfs  ramfs  /tmp

 

/bin/mount  -t  proc  proc  /proc

 

/bin/mount  -t  sysfs  sysfs  /sys

保存退出

[root@qljt1 rootfs]# chmod 777 etc/init.d/rcS

 

3.       etc/rc.local 文件

内容如下(由于还没有移植网卡驱动,所以暂时全部都注释掉了):

 

#!/bin/sh

# set ip

#/sbin/ifconfig lo 127.0.0.1 up

#/sbin/ifconfig eth0 172.22.60.223 netmask 255.255.0.0 up

#/sbin/route add default gw 172.22.60.1 eth0

保存退出

[root@qljt1 rootfs]# chmod 777 etc/rc.local

4.       .bashrc文件

[root@qljt1 rootfs]# vi .bashrc

#!/bin/bash

# set env

export PATH=/bin:/sbin:/usr/bin

export LD_LIBRARY_PATH=/lib:/usr/lib

保存退出

 

5.       添加一个hello world用户程序

[root@qljt1 rootfs]# cd /jffs2/rootfs_build/

[root@qljt1 rootfs_build]# vi hello.c

#include <stdio.h>

int main(void)

{

        printf("hello world!/n");

        return 0;

}

保存退出

[root@qljt1 rootfs_build]# arm-linux-gcc -o hello hello.c

[root@qljt1 rootfs_build]# cp hello /jffs2/rootfs/usr/bin/

 

六.          制作JFFS2根文件系统映像

制作JFFS2根文件系统需要用到MTD工具,其下载地址是:

ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.0.0.tar.gz

编译后会生成mkfs.jffs2 ,把mkfs.jffs2复制到 /sbin目录下。然后:

[root@qljt1 rootfs]# cd /jffs2

[root@qljt1 jffs2]# mkfs.jffs2  -r  rootfs  -o  rootfs.jffs2  -p  -l  -n  -e  0x4000

[root@qljt1 jffs2]# ls

rootfs  rootfs_build  rootfs.jffs2

rootfs.jffs2就是可用的jffs2根文件系统镜像。

-r 指定内含根文件系统的目录

-o 指定文件系统映象的输出文件名称

­-p  表示在映像的结尾用0x0补全到block

-l  存储格式为小端格式

-n 每个擦除的block中不添加clreanmarker

-e 擦除block的大小

 

Uboot下设置传递给内核的命令行参数:

setenv bootargs root=/dev/mtdblock2 init=/sbin/init console=ttySAC0,115200 rootfstype=jffs2

 

七.          下载运行

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

Freeing init memory: 120K

Warning: unable to open an initial console. 到这里停止,不能进控制台,修改如下:

[root@qljt1 jffs2]# cd /jffs2/rootfs/dev/

[root@qljt1 dev]# mknod -m 660 console c 5 1

[root@qljt1 dev]# mknod -m 660 null c 3 0

[root@qljt1 dev]# cd /jffs2

重新生成 rootfs.jffs2 下载运行。

 

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

Freeing init memory: 120K到这里停止,不能进控制台,估计是bash暂时没有启动,修改如下:

[root@qljt1 jffs2]# cd /jffs2/rootfs/etc/init.d/

[root@qljt1 init.d]# vi rcS

加上如下内容:

/bin/sh

保存退出,重新生成 rootfs.jffs2 下载运行。

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

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

Freeing init memory: 120K

/bin/sh: can't access tty; job control turned off

#

虽然还有小小错误,以后慢慢再改,但总算能够出控制台了。

 

但是hello和bash程序都不能运行,原因是他们链接的时候用了动态库。





转载于:https://www.cnblogs.com/yuzaipiaofei/archive/2011/07/02/4124721.html

相关文章:

  • 利用JavaScript全选、反选复选按钮
  • JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)...
  • 【开发板技术支持】关于real6410 模拟摄像头与real6410 开发板的接线方式图
  • Exchange2010 dag 的部署
  • 常用的ICON图标网站
  • 【学习】HTML5深入学习
  • 关于 CKEditor上传文件时调用ckeditor的技巧
  • windows计数器和瓶颈
  • 华赛防火墙USG2210 L2TP over IPsec×××配置实例
  • Oracle RAC内部错误:ORA-00600[kjbmprlst:shadow]一例
  • 个人起始
  • 浅谈VS编译自定义编译任务—MSBuild Task(csproject)
  • AjaxPro.Net的使用
  • 推荐20个优秀的网页色彩搭配实例
  • 系统集成资质培训 - 2011年下半年培训机构
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • angular2开源库收集
  • css系列之关于字体的事
  • Java比较器对数组,集合排序
  • js数组之filter
  • leetcode46 Permutation 排列组合
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • mongodb--安装和初步使用教程
  • React-Native - 收藏集 - 掘金
  • Redux 中间件分析
  • Spring Boot MyBatis配置多种数据库
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 工作中总结前端开发流程--vue项目
  • 缓存与缓冲
  • 盘点那些不知名却常用的 Git 操作
  • 微信小程序填坑清单
  • 原生 js 实现移动端 Touch 滑动反弹
  • 阿里云服务器如何修改远程端口?
  • 函数计算新功能-----支持C#函数
  • ​什么是bug?bug的源头在哪里?
  • ![CDATA[ ]] 是什么东东
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (C语言)字符分类函数
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)Neo4j下载安装以及初次使用
  • (原)Matlab的svmtrain和svmclassify
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .gitattributes 文件
  • .NET Compact Framework 3.5 支持 WCF 的子集