在linux中修改生物结构

时间:2013-01-10 21:47:44

标签: c linux io linux-kernel linux-device-driver

我正在尝试修改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)。有什么想法可能会发生什么?

谢谢,

-Misiu

2 个答案:

答案 0 :(得分:1)

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

说我必须警告你,在许多地方,可以使用内核sizeof(),它更易于移植,也许某些其他实现或API可能需要一些固定的大小。如果后者是真的那么你就会遇到问题,因为生物'结构大小已被你改变了。

这是一个猜测,我没有进一步的调查(我的意思是我没有详细研究生物)但是在修补Linux内核时必须确保任何可能的副作用并考虑到整个场景,特别是在修改较低级别的实现时。

生物辅助函数对bio struct执行大量低级操作,例如在bio_integrity.c上获取战利品。

答案 1 :(得分:1)

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

感谢您的帮助,

-Misiu