나는 커널 모듈을 구축한 경험이 없습니다. 설상가상으로 ChrUbuntu에서 하려고 하는데 기존 Ubuntu 가이드를 따라갈 수 없는 것 같습니다. 예를 들어 다음 명령은 실패합니다.
# apt-get install linux-headers-$(uname -r)
ChrUbuntu 커널은 버전 3.4.0이고 해당 버전에 대한 Ubuntu 저장소가 없기 때문입니다(내가 아는 한).
uname -a
Linux ChrUbuntu 3.4.0 #1 SMP Sun Aug 26 19:17:55 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
내가 살펴본 몇 가지 참고 자료는 다음과 같습니다.
Debian / Ubuntu Linux 커널 헤더 파일 패키지 설치
답변1
이 모든 내용은 Reddit 사용자 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
그것이 당신에게 어떻게 작동하는지 알려주세요. 커널 모듈을 컴파일하고 설치했습니다.
헤더를 #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입니다. 내가 링크한 스크립트를 사용하면 이 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. __kernel_ulong_t 유형이 정의되지 않았기 때문에 sysinfo.h를 수정해야 했습니다. uint64_t로 변경했습니다. 이것은 잘 작동하는 것 같습니다. 지금까지 내 모드에는 아무런 문제가 없었습니다. 3.4.0 헤더에서 sysinfo.h를 편집하기 위해 이 작업을 수행해야 하는지 확인하세요.
pps 이는 vbox 및 vmware 플레이어의 문제를 해결합니다! ! ! 그냥 설치하고 작동하면 됩니다!