Linux

Linux核心模組文件大小

  • October 21, 2011

我正在嘗試使用 vanilla 3.1.0-rc10 核心更新 CentOS 6 機器上的核心。它似乎可以工作,除了創建的模組的大小比來自發行版 RPM 的模組大得多。這是一個問題,因為該mkinitrd命令最終會創建一個大小為 100M 的 initram 文件(因為其中包含所有模組)。Grub 在啟動時需要永遠載入和解壓縮一個 100M 的 initram 文件。

簡而言之:

  1. 我下載了核心程式碼。
  2. 將執行中的核心配置從 /boot/config-2.6.xxx 複製到我的核心程式碼目錄中的 .config 。
  3. 執行make oldconfig並接受預設值
  4. 跑了make && make modules_install
  5. 跑了mkinitrd /boot/initramfs-3.1.0-rc10.x86_64.img 3.1.0-rc10

生成的 /boot/initramfs-3.1.0-rc10.x86_64.img 大小為 100M。

很明顯,因為模組的尺寸要大得多;選擇qla4xxxx你可以看到我的編譯版本是 3.6M 與發行版 116K。這是所有模組的情況。

[root@localhost ~]# ls -lh /lib/modules/2.6.32-71.el6.x86_64/kernel/drivers/scsi/qla4xxx/qla4xxx.ko
-rwxr--r--. 1 root root 116K May 19 23:37 /lib/modules/2.6.32-71.el6.x86_64/kernel/drivers/scsi/qla4xxx/qla4xxx.ko
[root@localhost ~]# ls -lh /lib/modules/3.1.0-rc10+/kernel/drivers/scsi/qla4xxx/qla4xxx.ko
-rw-r--r--. 1 root root 3.6M Oct 21 12:57 /lib/modules/3.1.0-rc10+/kernel/drivers/scsi/qla4xxx/qla4xxx.ko

我以前做過這個沒有問題;我在這裡俯瞰什麼?

在模組上執行strip --strip-unneeded以刪除無關符號。如果這樣做不行,size請在兩個模組上執行以查看差異所在。請注意,這會使調試更加困難。

引用自:https://serverfault.com/questions/323716