问题:
Begin: Waiting for root file system ...
Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
done.
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! UUID=53aa462b-5989-42ca-9f3d-1cf2334bf756 does not exist. Dropping to a shell!
解决方法:
1) 在获取源码包之前,确保在软件源配置文件/etc/apt/sources.list中添加了deb-src项
2) 使用如下命令获取tree源码包的详细信息:
sudo apt-cache showsrc tree
这用来查询当前镜像站点中是否有该源码包。
3)源码包中通常包含3个文件,分别以dsc,orig.tar.gz和diff.gz为后缀名。使用”apt-get source”命令来获取源码包,它会将源码包下载到用户当前目录,并在命令执行过程中,调用dpkg-source命令,根据dsc文件中的信息,将源码包解压到同名目录中,应用程序的源代码就在这里面。
sudo apt-get source tree
要强调的是,在下载源码包前,必须确保安装了dpkg-dev(执行”apt-get install dpkg-dev”来安装),否则,只会下载源码包的3个文件,但不会解压缩源码包。当然你也可以自己用dpkg-source命令去解压缩源码包。
4)在编译源码包前,需要安装具有依赖关系的相关软件包。使用”apt-get build-dep”命令可以主动获取并安装所有相关的软件包。
sudo apt-get build-dep tree
5)现在可以来编译源码包了,首先进入源码所在目录,使用dpkg-buildpackage命令来编译源码包,它会将生成的Deb软件包放置在上层目录中。
cd tree-1.5.1.2
sudo dpkg-buildpackage
这样就会编译生成tree-1.5.1.2-1_i386.deb
6)安装软件包。使用”dpkg –i”命令来安装生成的Deb软件包。
通过以上文章 下载源代码
kmod-libkmod_shared systemd_229-4ubuntu21.23.debian.tar.xz systemd_229.orig.tar.gz
kmod-libkmod_shared.zip systemd_229-4ubuntu21.23.dsc
下载后编译 发现根本自动加载不了模块
增加编译选项
./configure --enable-kmod
还是编译不过去 去github下载 kmod-libkmod_shared.zip
编译安装
编译通过 还是问题依旧
这下蒙逼了,只能撸源码
发现正常的systemd-udevd开始阶段有加载规则文件
而现在编译的没有加载规则文件
static const char* const rules_dirs[] = {
"/etc/udev/rules.d",
"/run/udev/rules.d",
/*加入此行*/ "/lib/udev/rules.d",
UDEVLIBEXECDIR "/rules.d",
NULL
};
原来我的initrd.img的规则文件在目录"/lib/udev/rules.d"中
源代码没有加入
果断加入
重编
systemd-udevd打包进initrd.img,重启
一切ok