我需要一步一步的指南來在 ChrUbuntu 中建構核心模組
我沒有建構核心模組的經驗。更糟糕的是,我正在嘗試在 ChrUbuntu 上執行此操作,因此我似乎無法遵循現有的 Ubuntu 指南。例如,此命令失敗:
# apt-get install linux-headers-$(uname -r)
因為 ChrUbuntu 核心是 3.4.0 版本,並且該版本沒有 Ubuntu 儲存庫(afaik)。
unname -a
Linux ChrUbuntu 3.4.0 #1 SMP Sun Aug 26 19:17:55 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
以下是我看過的一些參考資料:
這一切都來自 Redditer michaela_elise。(謝謝!)
有一個腳本可以在您的 Ubuntu 安裝上獲取和建構 ChromeOS 3.4 核心。這很棒,因為現在我們可以編譯核心模組了。
這
apt-get install linux-headers-$(uname -r)
不起作用,因為 3.4.0 似乎是 Google 特定的版本,您不能只獲取這些標頭。我在這裡添加了腳本。只需將其作為 sudo 執行,然後放手。完成後,您將擁有 /usr/src/kernel(這是原始碼和編譯後的核心)、/usr/src/linux-headers-3.4.0,它還會安裝此版本的核心。
#!/bin/bash set -x # # Grab verified boot utilities from ChromeOS. # mkdir -p /usr/share/vboot mount -o ro /dev/sda3 /mnt cp /mnt/usr/bin/vbutil_* /usr/bin cp /mnt/usr/bin/dump_kernel_config /usr/bin rsync -avz /mnt/usr/share/vboot/ /usr/share/vboot/ umount /mnt # # On the Acer C7, ChromeOS is 32-bit, so the verified boot binaries need a # few 32-bit shared libraries to run under ChrUbuntu, which is 64-bit. # apt-get install libc6:i386 libssl1.0.0:i386 # # Fetch ChromeOS kernel sources from the Git repo. # apt-get install git-core cd /usr/src git clone https://git.chromium.org/git/chromiumos/third_party/kernel.git cd kernel git checkout origin/chromeos-3.4 # # Configure the kernel # # First we patch ``base.config`` to set ``CONFIG_SECURITY_CHROMIUMOS`` # to ``n`` ... cp ./chromeos/config/base.config ./chromeos/config/base.config.orig sed -e \ 's/CONFIG_SECURITY_CHROMIUMOS=y/CONFIG_SECURITY_CHROMIUMOS=n/' \ ./chromeos/config/base.config.orig > ./chromeos/config/base.config ./chromeos/scripts/prepareconfig chromeos-intel-pineview # # ... and then we proceed as per Olaf's instructions # yes "" | make oldconfig # # Build the Ubuntu kernel packages # apt-get install kernel-package make-kpkg kernel_image kernel_headers # # Backup current kernel and kernel modules # tstamp=$(date +%Y-%m-%d-%H%M) dd if=/dev/sda6 of=/kernel-backup-$tstamp cp -Rp /lib/modules/3.4.0 /lib/modules/3.4.0-backup-$tstamp # # Install kernel image and modules from the Ubuntu kernel packages we # just created. # dpkg -i /usr/src/linux-*.deb # # Extract old kernel config # vbutil_kernel --verify /dev/sda6 --verbose | tail -1 > /config-$tstamp-orig.txt # # Add ``disablevmx=off`` to the command line, so that VMX is enabled (for VirtualBox & Co) # sed -e 's/$/ disablevmx=off/' \ /config-$tstamp-orig.txt > /config-$tstamp.txt # # Wrap the new kernel with the verified block and with the new config. # vbutil_kernel --pack /newkernel \ --keyblock /usr/share/vboot/devkeys/kernel.keyblock \ --version 1 \ --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \ --config=/config-$tstamp.txt \ --vmlinuz /boot/vmlinuz-3.4.0 \ --arch x86_64 # # Make sure the new kernel verifies OK. # vbutil_kernel --verify /newkernel # # Copy the new kernel to the KERN-C partition. # dd if=/newkernel of=/dev/sda6
讓我知道它是如何為您工作的。我已經用這個編譯和 insmod’d 核心模組。
這是#include標題的方法
include </usr/src/linux-headers-3.4.0/include/linux/module.h> include </usr/src/linux-headers-3.4.0/include/linux/kernel.h> include </usr/src/linux-headers-3.4.0/include/linux/init.h> include </usr/src/linux-headers-3.4.0/include/linux/syscalls.h>
//或任何你需要的東西
我猜你已經知道了,但萬一有人不知道這是核心模組的基本生成文件。一旦你使用了我連結的腳本,你就可以用這個 makefile 執行 make,一切都很好。將 kmod.o 替換為呼叫 source.c 的任何內容,但將其保留為 .o
Makefile obj-m += kmod.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
ps 我不得不修改 sysinfo.h 因為類型 __kernel_ulong_t 沒有定義。我將其更改為 uint64_t。這似乎工作得很好。到目前為止,我的模組沒有任何問題。確保您是否必須這樣做才能編輯 3.4.0 標頭中的 sysinfo.h
pps 這解決了 vbox 和 vmware 播放器的問題!!!他們只是安裝和工作!