如果有问题,请加QQ群 891339868 进行交流
最近的项目使用的是使用arm ubuntu16.04 base 创建的根文件系统,其中一个功能是要开机自动挂载u盘,需要做以下几项步骤设置,在这里记录一下:
一、获得当前u盘的信息
获取当前u盘的信息,可以使用两种方式:
1、使用blkid命令,该命令需要root权限,如下图所示:
可以看到,当前u盘的设备节点是/dev/sda1、UUID是"6F6A-788D"、分区格式是fat;
2、使用ls /dev/sd*查看,我一般用这个,如下图所示:
其实就是查看一下当前u盘的在文件系统中的设备节点,这里面有两个节点,第一个是代表当前的U盘设备,第二个代表当前U盘设备的分区,我的U盘当前只有一个分区,所以这两个没啥区别。
二、在/etc/fstab添加相关信息
/dev/sda1 /data vfat defaults 0 0
/dev/sda1代表要挂载的设备节点,/data代表设备挂载的目的路径,vfat代表当前需要挂载的设备分区格式为fat(我一般是按照fat32的格式格式化我的u盘)
三、在系统中安装udev(这一部分是这次记录的重点)
系统中一定要保证安装了udev,要不然如果在/etc/fstab里面添加了u盘的相关信息,系统不能正常启动,切记切记,在这个地方卡了半天,无意间发现base系统中没有安装udev,安装了udev以后,系统能正常启动了。下面详细分析一下原因:
1、udev是什么?
udev是一个利用linux内核在加入设备或者移除设备时,向上发送的热插拔事件(HotplugEvent)的设备信息,自动创建设备文件节点等工作的应用程序。从这个定义里面可以看出来,udev是一个完全工作在用户空间的程序。
2、udev怎么工作?
udev的工作过程如下:
(1)、当内核检测到系统中出现新设备以后,内核会通过netlink套接字发送uevent;
(2)、udev获取内核发送的信息,进行规则匹配。匹配的事物包括SUBSYSTEM、ACTION、atttribute、内核提供的名称(通过KERNEL=)以及其他的环境变量,udev的详细规则可用参考其他文档,这里不做记录。
3、为什么不安装udev,系统不能正常启动?
如果系统中不安装udev,开机时会出现这种情况,如下图所示:
就这样慢慢的等待貌似短暂其实很长的90秒的时间,为什么呢?咱们先用世俗的规则来分析一下:
(1)、内核代表的是部门的底层劳动者小头头儿(其实这个小头头儿管的很多),包罗万象,啥脏活累活都管,他存在的价值就是给上层领导提供有用的信息和处理问题的实际方案,并且管理他手下的虾兵蟹将;
(2)、上层应用代表的是部门或者是更高层的领导者,不管底层具体的实现过程,只管我要做成什么样子(终端客户的需求),你们底层给我实现,我只要现成的方案和反馈信息(接口);
(3)、好了,角色分配完毕了,职责和角色貌似已经比较完备了,那就开始工作吧;
(4)、“咔咔咔”,板子上搞了一个u盘,底层劳动者很负责(毕竟找份儿工作不容易),赶紧将信息上报给内核,内核收到信息后,赶紧往上报,报完以后,内核长长舒了一口气:“还好,还好,信息上报的还算及时,省的上面的人整天吐槽我不是实时的......”;
(5)、“什么情况?我刚加的U盘怎么不能用?你们下面的人是怎么搞的?”上层领导咆哮着,来质问内核。“我第一时间就将插入u盘的信息上报上去了呀!”内核很无辜的说。“你上报给谁了?”领导余气未消。“那谁知道?我的工作就是将信息传递出去,具体是谁接收,那是你们上层的事儿了”内核很不屑的回答说。上层领导被怼的无话可说......
(6)、第二天,领导得意的带着一个年轻漂亮的女孩儿来到内核旁边说:“这是我的秘书,她叫udev,以后专门负责接收你传递出来的信息,你们要好好配合”。“我只管发,她收不收到是她的事儿”,内核愤愤地说。
哈哈哈哈,说到这里,基本上可以搞清楚了为什么不安装udev,开机会不正常了吧。
系统启动以后,会根据各种配置文件,进行初始化,当读取到/etc/fstab文件时,发现里面有挂载规则,就开始挂载,如果系统中没有安装udev此类的监控内核信息的应用软件,就不会自动创建新添加的设备节点等信息,挂载规则里面的设备节点在系统内找不到,初始化进程就在这个地方循环检测,一直到timeout,就会出现上图中的现象,从而导致系统启动不成功。
好了们今天就记录到此吧!