2013-01-10 58 views
1

我試圖修改linux-3.2.0(運行Ubuntu)的生物結構(在blk_types.h中)。我需要對這個結構做的唯一事情就是添加一個額外的變量來跟蹤一個整型變量(這是一個影響算法)。但是,添加一行如「int id;」到結構停止操作系統的啓動順序。修改linux中的生物結構

它編譯,但啓動時,它提供了以下錯誤:

>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) 

我前後花了使用給定的殼一看,無法找到uuid或以其他方式(無/ dev/sda上所需的文件系統)。任何想法可能會發生什麼?

感謝,

-Misiu

+0

聽起來好像你還沒有重建你的initramfs以包括您新建的內核所需的內核模塊。 – caf

+0

我重建並檢查了initrd映像。現有(工作)內核和修改後的內核都具有完全相同的initrd映像(與我解壓並將它們同時編入目錄並將其與遞歸diff進行比較相同)。由於我所做的改變非常小,我認爲它們應該是相同的。如果我在這個假設中錯了,請讓我知道。 – user1959697

+0

您需要重新構建所有模塊,因爲它們取決於您更改過的'struct bio'的佈局。 – caf

回答

0

我想你正試圖修改Linux內核頭bio.h,而不是它的用戶空間 「朋友」 bui.h.

說我必須警告你,在內核sizeof()的許多地方可能會使用更便攜,也許某些其他實現或API可能會期望一些固定的大小。如果後者是真的,那麼你會遇到問題,因爲生物的結構大小已被你改變。

這是一個猜測,我沒有進一步的調查(我的意思是我沒有詳細調查bio),但是在修補Linux內核時,必須確保任何可能的副作用並考慮到整個場景特別是在修改較低級別的實現時。

生物幫手功能在生物結構上做了很多低級別的操作,比如拿bio_integrity.c中的一個掠奪。