Ubuntu kernel设备都被隐含地映射到/dev目录

系统 Linux
另外一种方法就是给Ubuntu kernel传递未经归类的设备文件名,在udev未创建之前,所有的设备实际上已经通过sysfs 建立,mtdblockX的位置相对于/sys/block/mtdblockX/dev,这个文件里存放着mtdblockX的设备号,形式与上 一种方式相同。

Ubuntu kernel是常用系统,于是我学习研究了Ubuntu kernel,在这里对大家详细介绍下Ubuntu kernel系统应用,希望对大家有用。由于在Ubuntu kernel启动未完成以前我们的设备文件不可用,如果使用mtd设备作为rootfs的挂载点,这个时候/dev/mtdblock 这个设备目录是不存在的,我们无法让Ubuntu kernel通过/dev/mtdblock/X这样的设备找到rootfs,Ubuntu kernel只好停在那里惊慌。

这个问题我们可以通过给Ubuntu kernel传递设备号的方式来解决,在linux系统中,mtdblock的主设备号是31,part号 从0开始,那么以前的/dev/mtdblock/3就等同于31:03,以次类推,所以我们只需要修改bootloader传给Ubuntu kernel 的cmd line参数,使root=31:03,就可以让Ubuntu kernel在udevd未起来之前成功的找到rootfs。

另外一种方法就是给Ubuntu kernel传递未经归类的设备文件名,在udev未创建之前,所有的设备实际上已经通过sysfs 建立,mtdblockX的位置相对于/sys/block/mtdblockX/dev,这个文件里存放着mtdblockX的设备号,形式与上 一种方式相同。

这时由于没有相应的udev规则,所有的设备都被隐含地映射到/dev目录下,mtdblockX对应于 /dev/mtdbockX,这样我们给Ubuntu kernel传递root=/dev/mtdblock3,Ubuntu kernel发现/dev没有被建立,就自动从映射表里 查找对应关系,***取出/sys/block/mtdblockX/dev里的设备号,完成rootfs的挂载。

2、在rootfs/etc/udev下建立一个rules.d目录,生成一个空的配置文件touch etc/udev/rules.d/udev.conf。 这里是不是有些问题,我本机上的udev.conf文件是在/etc/udev/下的。 在udev_version.h中有以下两个定义:
#define UDEV_CONFIG_FILE "/etc/udev/udev.conf"
#define UDEV_RULES_FILE "/etc/udev/rules.d"

我想之所以采用rules.d的目录形式,其目的和rcX.d相同,可以在规则十分复杂的情况下用数字链接的方式控制启动顺序。由于版本的不断升级,代码以及结构也越来越漂亮。 我们按照这种默认的方式来编写和存放规则文件,不失为一个好习惯。

我的/etc/udev/下有rules.d目录和udev.conf文件我的意思是udev.conf文件是否应该在/etc/udev目录而非/etc/udev/rules.d目录下Ubuntu图形界面,一切尽在掌握是这样的,谢谢指正!

更正如下:
2、在rootfs/etc/udev下建立一个rules.d目录,生成一个空的配置文件touch etc/udev/rules.d/udev.rules。

兄弟确实是火眼金睛啊,这里有个笔误有两个问题:

1、udevstart 后面不用 udevsettle 会不会出问题?

2、我目前使用的两个2.6机器,gentoo 和 debian 的新版本似乎都放弃了 udevstart。

gentoo 的启动脚本里面启动 udevd 之后检查 Ubuntu kernel 的版本,如果高于 2.6.14 则使用 udevtrigger,低于或者等于则使用 udevstart(两种情况后面都有 udevsettle);由于我现在还在使用 2.6.11 所以启动时使用的是 udevstart,udev 版本是 098。

至于 debian testing 我现在 Ubuntu kernel 的版本是 2.6.17,udev 版本是 100,debian 的udev安装包里已经没有 udevstart 了,启动脚本使用 udevd+udevtrigger+udevsettle。
是不是 udevstart 要被 udevtrigger 取代了?简单看了一下udev的代码,个人以为:

1,udevstart后面不用udevsettle可能会出错。因为udevstart要启动其他的程序来完成任务, 如果不运行udevsettle,可能udevstart结束了,但/dev下的设备还没有创建。

2,udevtrigger比udevstart优化一些,功能强一些,但udevstart也可以用。 内核版本的分水岭是2.6.15,新的udev,比如udev-100,要求内核2.6.15(包含)以上。 可能udevtrigger是新的udev才有的东西

想问一下: 既然udev是user space,我在2410的linux移植中,如果选用devfs,则在引导Ubuntu kernel时devfs会自动建立设备包括引导需要的console或ttyS,但如果我不用devfs而选用udev,那系统就不能正常引导,而非要自己在/dev下创建console或ttyS。

Ubuntu kernel另外我将udevd和udevstart按楼主所说方法移植到ARM linux中,在执行rcS内容时,提示
Starting udevd...
/etc/init.d/rcS: /etc/init.d/rcS: 7: /sbin/udevd: not found
/etc/init.d/rcS: /etc/init.d/rcS: 8: /sbin/udevstart: not found

Ubuntu kernel可是在/sbin/下确实存在这两个文件,而且/etc/udev/下面的文件我也已经建好。
我在进入shell后,手动运行:
/sbin $ udevd --daemon
/bin/sh: udevd: not found
还是一样的情况。不知我的理解是否有误?还是哪里出了问题

【编辑推荐】

  1. Ubuntu Apache配置安装与ROR 应用
  2. Ubuntu cvs可以用***版版上下代码了
  3. Ubuntu安裝環境各種奇奇怪怪的事情
  4. Ubuntu apache安装著名的开源http服务端
  5. Ubuntu IBM将强化Web 2.0功能
责任编辑:佚名 来源: csdn
相关推荐

2023-09-06 17:06:51

LinuxVxVMSAN LUN

2017-08-23 10:18:42

2016-01-12 14:54:58

UbuntuLinuxKernel 4.4

2011-03-16 10:43:36

2021-07-30 14:55:06

Linuxkernel设备树

2010-09-01 14:07:33

DB2映射

2015-10-13 10:41:08

KernelUbuntuLinux

2009-10-28 10:07:22

linux虚拟机添加硬盘

2015-10-10 17:41:41

Kernel内核Ubuntu

2011-03-17 09:54:02

iptables 映射外网内网

2015-09-07 17:45:04

升级UbuntuLinux

2015-11-26 11:13:22

Ubuntu 16.0Kernel 4.4内核

2014-12-03 10:27:06

BYODBYOD安全移动设备

2010-07-28 09:59:18

DB2数据库表

2022-09-08 09:42:26

JavaScripMapObject

2010-01-04 15:53:58

2009-03-24 10:12:55

ESXRDM删除分区

2012-04-23 15:01:19

2011-08-29 11:16:27

Ubuntu

2012-02-22 16:08:17

UbuntuAndroid
点赞
收藏

51CTO技术栈公众号