嵌入式Linux驱动学习之路(八)创建最小的根文件系统
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驱动学习之路(八)创建最小的根文件系统的更多相关文章
- 嵌入式Linux驱动学习之路(七)Linux内核启动流程
编译的内核可能会很大,故这里可以压缩一下.而在内核文件中需要解压,所以就会有一段自解压代码. 在uboot启动内核的时候,调用了函数: thekernel(0,MACH_ID,params_addr ...
- 嵌入式Linux驱动学习之路(十八)LCD驱动
驱动代码: /************************************************************************* > File Name: lcd ...
- 嵌入式Linux驱动学习之路(十六)输入子系统
以前写的一些输入设备的驱动都是采用字符设备处理的.问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的.不同类别的输入设备进行统一的驱动,所以 ...
- 嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
在之前的定时器驱动程序中,我们发现在连续按下按键的时候,正常情况下应该是一次按下对应一次松开.而程序有时候会显示是两次按下,一次松开.这个问题是因为在按下的时候,因为是机械按键,所以电压信号会产生一定 ...
- 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞
目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i ) 定义原子变量v并初始化为i atomic_read(v) 返回原子变量 ...
- 嵌入式Linux驱动学习之路(十二)按键驱动-poll机制
实现的功能是在读取按键信息的时候,如果没有产生按键,则程序休眠在read函数中,利用poll机制,可以在没有退出的情况下让程序自动退出. 下面的程序就是在读取按键信息的时候,如果5000ms内没有按键 ...
- 嵌入式Linux驱动学习之路(十一)按键驱动-中断机制
轮询方式: 和led驱动不同的是在配置IO引脚的时候,把LED的输出引脚换成输入,在read函数中向外发送io的状态.必须由应用程序不断的来查询当前IO口的状态来判断. 中断方式: /* file n ...
- 嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
首先贴上代码: 字符设备驱动代码: /** *file name: led.c */#include <linux/sched.h> #include <linux/signal.h ...
- 嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构
硬件资料: 操作系统:(非虚拟机) zws@z-pc:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubuntu Desc ...
随机推荐
- Atitit jOrgChart的使用 组织架构图css html
Atitit jOrgChart的使用 组织架构图css html 1. 项目要做组织架构图,要把它做成自上而下的树形结构,于是决定1 2. Html导入 以来的css js1 2.1. 数据来源 ...
- [Android]AndroidInject增加sqlite3数据库映射注解(ORM)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...
- html ul li的学习
DIV+CSS里,我们用得最多的就是ul li来显示数据,如新闻按钮等. <div id="menu"> <ul> <li><a href ...
- 你真的了解UITextView吗?
一:首先查看一下关于UITextView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView <UITextI ...
- (20160604)开源第三方学习之CocoaLumberjack
CocoaLumberjack是一个很好用的日志打印工具,它可以帮助我们把工程中的日志信息打印到终端或者输出到文件中. 地址:https://github.com/CocoaLumberjack/Co ...
- iOS解析数据时Error=3840
1.解析JSon数据格式出错的问题 unescaped control character around character XXXX 和 The data couldn’t be read beca ...
- ios xcode Code signing failed 解决方案
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min ...
- django tmeplate 循环基数
{% for item in item_list %} {{ forloop.counter }} {# starting index 1 #} {{ forloop.counter0 }} {# s ...
- yii2搭建完美后台并实现rbac权限控制案例教程
作者:白狼 出处:www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...
- 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,加了几个网 ...