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. ARCGIS server没有服务、silverlight不能调试、windows server2008安装时跳出“安装程序无法创建新的系统分区也无法定位现有的系统分区”的解决方案

    1.某个系统服务没开启 2.默认浏览器设置为IE.(IE内核有时候也不能调试) 3.BIOS里面的SATA设置为开启.

  2. 更新CocoaPods碰到的问题及知识点

    1:解决CocoaPods安装时报的问题,http://ruby.taobao.org/latest_specs.4.8.gz 报404 解决 bad response Not Found 404 ( ...

  3. GET和POST请求

    GET与POST请求 简介 GET请求解释及语法格式 POST请求简介及语法 GET请求代码 POST请求代码 GET请求解释及语法格式: 网络请求默认是get 网络请求有很多种:GET查 POST改 ...

  4. JQuery实现当鼠标停留在某区域3秒后执行

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. vs合并压缩css,js插件——Bundler & Minifier

    之前做了一个大转盘的抽奖活动,因为比较火,部分用户反馈看不到页面的情况,我怀疑js加载请求过慢导致,所以今天针对之前的一个页面进行调试优化. 首先想到的是对页面的js和css进行压缩优化,百度了下vs ...

  6. DOM样式操作

    CSS 到 DOM的抽象 通过操作 CSS 对应的 DOM对象来更新CSS样式 换肤操作 如何获取实际的样式(不仅有行内,更有页面和外联样式表中定义的样式) 样式表分为三类: 外联,页面,行内 内部样 ...

  7. asp.net MD5 加密

    //Md5摘要 string resultMD5 = FormsAuthentication.HashPasswordForStoringInConfigFile("要加密的内容" ...

  8. 【转发】网易邮箱前端技术分享之javascript编码规范

    网易邮箱前端技术分享之javascript编码规范 发布日期:2013-11-26 10:06 来源:网易邮箱前端技术中心 作者:网易邮箱 点击:533 网易邮箱是国内最早使用ajax技术的邮箱.早在 ...

  9. ORA-00988: missing or invalid password(s)

    创建账号或修改账号密码时有可能会遇到ORA-00988: missing or invalid password(s),那么什么情况下会遇到这种错误呢? 一般是因为密码的设置不符合命名规范: 1:密码 ...

  10. mvc razor中renderPartial,RenderAction,Partial,Action的使用选择

    RenderPartial: 通常被用来显示一个功能相对独立的“块”,比如说显示菜单或者导航条. RenderPartial输出的结果被作为调用的View的一部分显示. 这个方法会直接将结果写入到当前 ...