2

我正在尝试修改 linux-3.2.0(运行 Ubuntu)的 bio 结构(在 blk_types.h 中)。我唯一需要对这个结构做的就是添加一个额外的变量来跟踪一个整数变量(它用于污染算法)。但是,添加单行,例如“int id;” 到该结构会停止操作系统的启动顺序。

它可以编译,但是在启动时会出现以下错误:

>Gave up wiating for root device. Common problems:  
>Boot args  
>check rootdelay= ...  
>check root= ...  
>missing modules (cat /proc/modules; ls /dev)  
>ALERT! /dev/disk/by-uuid/15448888-84a0-4ccf-a02a-0feb3f150a84 does not exist. Dropping to a shell!  
>BusyBox Built In Shell ...  
>(initramfs)

我使用给定的 shell 环顾四周,无法通过 uuid 或其他方式(没有 /dev/sda)找到所需的文件系统。任何想法可能会发生什么?

谢谢,

-米修

4

2 回答 2

1

我设法在您的帮助下解决了问题 Caf。虽然重新构建/安装模块似乎没有立即帮助,但我能够通过将 SATA 驱动程序构建到内核中来启动系统,正如这个论坛帖子所建议的那样:https ://unix.stackexchange.com/问题/8405/kernel-cant-find-dev-sda-file-during-boot

谢谢你的帮助,

-米修

于 2013-01-25T20:48:14.233 回答
1

我想您正在尝试修改 Linux 内核头文件 bio.h,而不是它的用户态“朋友”bui.h。

说我必须警告你,在内核 sizeof() 周围的许多地方可能会使用更便携的,也许其他一些实现或 API 可能需要一些固定的大小。如果后者是真的,那么您将遇到问题,因为您已更改了 bio 结构大小。

这是一个猜测,我没有进一步调查(我的意思是我没有详细调查 bio)但是在修补 Linux 内核时,必须确保任何可能的副作用并考虑整个情况,特别是在修改时下层实现。

Bio helper 函数对 bio 结构进行大量低级操作,例如在 bio_integrity.c 中进行掠夺。

于 2013-01-11T16:45:09.820 回答