Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36707
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-04 14:38
文章分类
文章存档

2015年(9)

我的朋友
最近访客

分类: 嵌入式

2015-09-22 19:52:33

在文章 《》中,当提及 构建dev目录 时,使用的静态的方法,也就是根据预先知道要挂载的驱动,用mknod命令逐一构建,现在介绍一种使用mdev创建设备文件的方法。

mdev是udev的简化版本,通过读取内核信息来创建设备文件。其用途主要有:初始化/dev目录,动态更新,支持热插拔。要使用mdev,需要内核支持sysfs文件系统,为了减少Flash的读写,还要支持tmpfs文件系统。现确保内核已经已经设置 CONFIG_SYSFS 和 CONFIG_TMPFS 配置项。

针对这两个选项,我们来看看。转到自己编译的内核的目录下,我们编译内核时都是现加载s3c2410_defconfig这份默认配置文件的,然后再作修改,所以看看s3c2410_defconfig文件,其中有内容如下:

CONFIG_SYSFS=y
CONFIG_TMPFS=y

也就是说默认的配置下已经满足使用mdev的要求。

现在回到busybox编译出来的文件系统文件夹下。
修改etc/fstab文件,修改后如下:

#device mount-point type options dump fsck order
 
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0

其实就是在fstab文件后多挂载sysfs tmpfs两个设备而已。

修改etc/init.d/rcS文件,修改后如下:

#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

其中的语句就是和mdev的使用方法几乎一样。可参考busybox/doc/mdev.txt文档。

修改erc/inittab文件,修改后如下:

#/etc/inittab
::sysinit:/etc/init.d/rcS
#ttySAC0::askfirst:-/bin/sh
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

上述修改中,将ttySAC0::askfirst:-/bin/sh注释,代替的是s3c2410_serial0::askfirst:-/bin/sh。因为开发板上通过mdev生成的/dev目录中,s3c2410、s3c2440的串口名为s3c2410_serial0等。

另外,mdev通过init进程启动,在使用mdev构造/dev目录前,init进程至少要用到/dev/console /dev/null。所以像使用静态方法一样构建它们。在/dev/下执行

sudo mknod console c 5 1
sudo mknod null c 1 3

而proc mnt tmp sys root 等都按照原来方法构建空目录即可。

这样,跟文件系统的dev目录的设备文件就会在系统启动时自动生成。

另外,把生成好的文件系统镜像文件弄到nand flash上启动,进入系统后,发现一个奇怪的现象。无论当前路径在哪,提示符都只会显示一个“/”,这一看估计就是shell的配置问题。
在/etc/profile文件下(该文件也许要自己建立)输入export PS1=’w:’
保存后却发现没效果。google了一下,发现是busybox的配置问题。

解决方法:
在编译busybox时需要将选项CONFIG_FEATURE_EDITING_FANCY_PROMPT选上。

Location:
 
    -> Busybox Settings --->
 
        -> Busybox Library Tuning  --->
 
            -> [] Fancy shell prompts

对于Fancy shell prompts的help如下

Setting this option allows for prompts to use things like w and  $ and escape codes.
设置了该选项将允许提示符使用 w 和 $的转移码(大概这意思吧)

这样,从新编译busybox后再根据余下的步骤构建根文件系统即可。
效果:(注意那个/etc:)

/etc:ls
fstab init.d inittab profile
阅读(2161) | 评论(0) | 转发(0) |
0

上一篇:掌握udev

下一篇:什么是MTD?

给主人留下些什么吧!~~