busybox

  在配置busybox,在是否选择要静态链接库时,在静态下,busybox中的工具不需要动态链接库,能够直接运行。而用户自己编写的程序如果需要动态链接库,还是依然需要有。

  (从http://www.busybox.net/downloads/可以下载busybox工具)

  如果是动态链接库,则busybox和用户自己编写的程序都需要动态链接库。 

  这里,因为我们以后需要使用自己编写的程序,故选择使用动态链接库。  

  busybox 要支持mdev、Tab补全功能、insmod模块安装命令、ifconfig命令等。

    Busybox Settings

      Busybox Library Tuning

        Tab completion

然后就是编译、安装。安装的时候一定要跟上路径,不然很有可能破坏电脑的文件系统。

修改Makefile

CROSS_COMPILE ?= arm-linux-

make

make CONFIG_PREFIX=/work/nfs_root/first_fs install
 bootargs = noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

构建最小文件系统。

  首先创建最基本的设备文件。(/dev/console和/dev/null)。

  在pc上查看当前电脑的设备号。

zws@z-pc:/home/jz2440/fsroot$ ls /dev/console -l
crw------- root root , 10月 : /dev/console
zws@z-pc:/home/jz2440/fsroot$ ls /dev/null -l
crw-rw-rw- root root , 10月 : /dev/null

  然后在相应的文件夹中创建对应的设备文件。

mkdir dev
cd dev/
sudo mknod console c
sudo mknod null c

  构造inittab

mkdir etc
cd etc/
touch inittab
console::askfirst:-/bin/sh

  构建C库  

mkdir lib
cp 。。。。/arm-linux/lib/*.so* ./ -D

完成最小根文件系统的构建。

使用 mkyaffs2image 制作文件系统。

将文件系统通过tftp下载到开发板板,并写入到nand Flash

tftpboot  fsroot.yaffs2
nand erase root
nand write.yaffs 0x30000000 root $(filesize)

最小文件系统完成。

  支持PS命令。

mkdir sys
mkdir proc
mdkir etc/init.d
tocuh etc/init.d/rcS

  在inittab中添加

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

  在rcS中添加

mount -a

  在etc下新建fstab。 添加

  #device        mount-point        type        option        dump    fsck order
  proc /proc proc defaults

使用udev。而mdev是udev的简化版本。

  使用mdev自动创建设备文件

  在fstab中添加

sysfs        /sys            sysfs        defaults
tmpfs /dev tmpfs defaults

  在rcS中添加

mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

到此为止,一个基本的文件系统已经创建完成。

设置启动参数:

set bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

 NFS网络文件系统

  在UBUNTU的/etc/exports中修改共享的目录路径Document/nfsroot.txt。

set bootargs=root=/dev/nfs rw nfsroot=<serverip>:/home/zht/rfsys nfsaddrs=<clientip>:<serverip>:192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,

添加文件系统的命令工具

  我们制作的最小根文件系统只有基础的一些功能,比如当我们需要在开发板上执行格式化磁盘命令mkdosfs、磁盘分区命令fdisk 等的命令时会发现我们制作的根文件系统没有这些命令工具,因此我们需要自己添加相应的命令工具。

从http://pkgs.fedoraproject.org/repo/pkgs/dosfstools/网站上下载dosfstools-3.0.16.tar.gz文件,在PC机上进行解压让后通过make CC=arm-linux-gcc进行交叉编译得到mkdosfs文件。将mkdosfs拷贝到开发板的/usr/sbin/目录下即可。

  

嵌入式Linux驱动学习之路(八)创建最小的根文件系统的更多相关文章

  1. 嵌入式Linux驱动学习之路(七)Linux内核启动流程

    编译的内核可能会很大,故这里可以压缩一下.而在内核文件中需要解压,所以就会有一段自解压代码. 在uboot启动内核的时候,调用了函数: thekernel(0,MACH_ID,params_addr ...

  2. 嵌入式Linux驱动学习之路(十八)LCD驱动

    驱动代码: /************************************************************************* > File Name: lcd ...

  3. 嵌入式Linux驱动学习之路(十六)输入子系统

    以前写的一些输入设备的驱动都是采用字符设备处理的.问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的.不同类别的输入设备进行统一的驱动,所以 ...

  4. 嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖

    在之前的定时器驱动程序中,我们发现在连续按下按键的时候,正常情况下应该是一次按下对应一次松开.而程序有时候会显示是两次按下,一次松开.这个问题是因为在按下的时候,因为是机械按键,所以电压信号会产生一定 ...

  5. 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞

    目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i )  定义原子变量v并初始化为i atomic_read(v)        返回原子变量 ...

  6. 嵌入式Linux驱动学习之路(十二)按键驱动-poll机制

    实现的功能是在读取按键信息的时候,如果没有产生按键,则程序休眠在read函数中,利用poll机制,可以在没有退出的情况下让程序自动退出. 下面的程序就是在读取按键信息的时候,如果5000ms内没有按键 ...

  7. 嵌入式Linux驱动学习之路(十一)按键驱动-中断机制

    轮询方式: 和led驱动不同的是在配置IO引脚的时候,把LED的输出引脚换成输入,在read函数中向外发送io的状态.必须由应用程序不断的来查询当前IO口的状态来判断. 中断方式: /* file n ...

  8. 嵌入式Linux驱动学习之路(十)字符设备驱动-my_led

    首先贴上代码: 字符设备驱动代码: /** *file name: led.c */#include <linux/sched.h> #include <linux/signal.h ...

  9. 嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构

    硬件资料: 操作系统:(非虚拟机) zws@z-pc:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubuntu Desc ...

随机推荐

  1. Atitit jOrgChart的使用  组织架构图css html

    Atitit jOrgChart的使用  组织架构图css html 1. 项目要做组织架构图,要把它做成自上而下的树形结构,于是决定1 2. Html导入 以来的css js1 2.1. 数据来源 ...

  2. [Android]AndroidInject增加sqlite3数据库映射注解(ORM)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...

  3. html ul li的学习

    DIV+CSS里,我们用得最多的就是ul li来显示数据,如新闻按钮等. <div id="menu"> <ul> <li><a href ...

  4. 你真的了解UITextView吗?

    一:首先查看一下关于UITextView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView <UITextI ...

  5. (20160604)开源第三方学习之CocoaLumberjack

    CocoaLumberjack是一个很好用的日志打印工具,它可以帮助我们把工程中的日志信息打印到终端或者输出到文件中. 地址:https://github.com/CocoaLumberjack/Co ...

  6. iOS解析数据时Error=3840

    1.解析JSon数据格式出错的问题 unescaped control character around character XXXX 和 The data couldn’t be read beca ...

  7. ios xcode Code signing failed 解决方案

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min ...

  8. django tmeplate 循环基数

    {% for item in item_list %} {{ forloop.counter }} {# starting index 1 #} {{ forloop.counter0 }} {# s ...

  9. yii2搭建完美后台并实现rbac权限控制案例教程

    作者:白狼 出处:www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  10. Linux PHP5.3升级PHP5.5.33 (CentOS)

    由于要使用了laravel5.1,php要升级到5.5以上.具体环境是Aliyun Cent OS 7.0.由于阿里的yum源lastest只有5.4,laravel5.1必须php5.5,加了几个网 ...