近日看韦东山老师视频制作根文件系统,有一讲是使用mdev创建设备节点。主要方法参照busybox源码中docs/mdev.txt这篇文档。
下面是这篇文档部分内容:
<pre name="code" class="plain">Here's a typical code snippet from the init script:
[0] mount -t proc proc /proc
[1] mount -t sysfs sysfs /sys
[2] echo /bin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s
......
Of course, a more "full" setup would entail executing this before the previous
code snippet:
[4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
[5] mkdir /dev/pts
[6] mount -t devpts devpts /dev/pts
根据这些内容,以及参照韦老师讲解,我是这么做的。
1. /etc/fstab文件中添加(对应文档步骤[0] [1])
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
<pre name="code" class="plain">echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s
mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
mount -t devpts devpts /dev/pts
3. 手动创建/dev/pts目录(对应文档步骤[5])
PS:我是使用nfs网络文件系统,在host端的目录下直接创建的该目录。按道理说在启动后直接能看到该目录。
4. /etc/inittab文件中
console::askfirst:-/bin/sh
修改为
s3c2410_serial0::askfirst:-/bin/sh
PS:只看视频的同学可能不知道这一步,书上介绍了mdev生成的/dev目录串口名为s3c2410_serial0。至于console怎么了,以后再说。
好了上电,发现出现以下问题:
mount point /dev/pts does not exist
can't open /dev/s3c2410_serial0: No such file or directory
PS:错误为节选,不全,也可能不是原话。
意思是说/dev/pts和/dev/s3c2410_serial0不存在。我就在我host机上看了下/dev目录的内容,发现都存在啊,然后就各种纠结了。后来我想再仔细看看busybox提供的文档。我发现这么一句我可能理解错了。
Of course, a more "full" setup would entail executing this before the previous<pre name="code" class="plain">code snippet:
我看到entail第一反应就是结尾处,所以步骤[4] [5] [6]应该在[0] [1] [2] [3]后面执行。后来才知道entail是“需要“的意思。(o(╯□╰)o,英语就是渣啊)这句话是说下面的内容要在上面的内容之前执行。跟开始的理解正好相反。
修改下方案。
1. /etc/init.d/rcS文件修改为
#! /bin/sh
echo "yb's first filesystem!"
mount -t tmpfs -o size=63k,mode=0755 tmpfs /dev
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mount -a
echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s
重启后,一切OK~
我在板子上执行mount -t tmpfs -o size=63k,mode=0755 tmpfs /dev后,看/dev目录空了,也就是这个原因导致了前面提到的错误(注意,以前创建的console也没有了,正常启动时被s3c2410_serial0替代)。
最后提下,文档中步骤[2]中/bin/mdev其实应该为/sbin/mdev,mdev是在/sbin目录下的。这是看别人blog看到的。