Eu preciso de um guia passo a passo para construir módulos do kernel no ChrUbuntu

2

Eu não tenho experiência em construir módulos do kernel. E pior, estou tentando fazer isso no ChrUbuntu, então parece que não posso seguir os guias do Ubuntu. Por exemplo, este comando falha:

# apt-get install linux-headers-$(uname -r)

porque o kernel ChrUbuntu é a versão 3.4.0 e não há repositório do Ubuntu para essa versão (afaik).

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

Aqui estão algumas referências que eu consultei:

Kernel / Compile - Documentação do Ubuntu da comunidade

Como: Compilar os módulos do kernel do Linux

Pacote Debian / Ubuntu Linux Kernel Headers

Módulo de Kernel Hello Loadable | Mark Loiseau

64 bit - Como eu compilo um módulo do kernel? - Pergunte ao Ubuntu

Compilando módulos do kernel

Configurando o Ubuntu para construir módulos do kernel - Drew Stephens

    
por MountainX 12.05.2013 / 23:22

1 resposta

5

Tudo isso é do Redditer michaela_elise. (Obrigado!)

Existe um script que irá obter e construir o kernel do ChromeOS 3.4 na sua instalação do Ubuntu. Isso é ótimo porque agora podemos compilar os mods do kernel.

O apt-get install linux-headers-$(uname -r) não funciona porque o 3.4.0 parece ser uma versão específica do Google e você não pode simplesmente obter esses cabeçalhos.

Eu adicionei o script aqui. Basta executá-lo como sudo e deixá-lo ir. Quando estiver pronto, você terá / usr / src / kernel (este o kernel fonte e compilado), /usr/src/linux-headers-3.4.0, ele também instala esta versão do kernel.

#!/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

Deixe-me saber como isso funciona para você. Eu compilei e insirei módulos do kernel com isso.

Aqui está como você #inclui os cabeçalhos

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>

// ou o que você precisa especificamente

E eu estou supondo que você já sabe disso, mas no caso de alguém não fazer isso é o makefile básico para os mods do kernel. Depois de usar o script que eu vinculei, você pode simplesmente executar make com este makefile e tudo estará bem. substitua kmod.o com qualquer que seja sua origem.c é chamada exceto mantê-lo como .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

p.s. Eu tive que modificar sysinfo.h porque o tipo __kernel_ulong_t não foi definido. Eu mudei para uint64_t. Isso parece funcionar muito bem. meus mods não tiveram problemas até agora. Certifique-se de que você tenha que fazer isso para editar o sysinfo.h nos cabeçalhos 3.4.0

p.p. Isso corrige os problemas com o vbox e o vmware player !!! Eles apenas instalam e trabalham !!

    
por 06.06.2013 / 06:02