本文是如何利用kvm/qemu練習linux module的更新版。
brook@vista:~/qemu$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux Cloning into 'linux'... remote: Counting objects: 4153172, done. remote: Compressing objects: 100% (548/548), done. remote: Total 4153172 (delta 278), reused 0 (delta 0) Receiving objects: 100% (4153172/4153172), 919.28 MiB | 2.32 MiB/s, done. Resolving deltas: 100% (3423945/3423945), done. Checking out files: 100% (49457/49457), done. brook@vista:~/qemu$ cd linux/ brook@vista:~/qemu/linux$ git tag -l | tac | head -2 v4.1-rc8 v4.1-rc7 brook@vista:~/qemu/linux$ cp /boot/config-3.8.0-35-generic .config brook@vista:~/qemu/linux$ make ARCH=i386 olddefconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --olddefconfig Kconfig .config:550:warning: symbol value 'm' invalid for ACPI_PCI_SLOT .config:553:warning: symbol value 'm' invalid for ACPI_HOTPLUG_MEMORY .config:665:warning: symbol value 'm' invalid for HOTPLUG_PCI_ACPI .config:4522:warning: symbol value 'm' invalid for FB_VESA .config:5062:warning: symbol value 'm' invalid for USB_ISP1760_HCD .config:6150:warning: symbol value 'm' invalid for VME_BUS # # configuration written to .config # brook@vista:~/qemu/linux$ make ARCH=i386 all scripts/kconfig/conf --silentoldconfig Kconfig SYSTBL arch/x86/syscalls/../include/generated/asm/syscalls_32.h SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h ...(略) IHEX firmware/yam/1200.bin IHEX firmware/yam/9600.bin brook@vista:~/qemu/linux$ cd .. brook@vista:~/qemu$ git clone git://busybox.net/busybox.git Cloning into 'busybox'... remote: Counting objects: 91770, done. remote: Compressing objects: 100% (23149/23149), done. remote: Total 91770 (delta 71829), reused 86760 (delta 68061) Receiving objects: 100% (91770/91770), 21.68 MiB | 805 KiB/s, done. Resolving deltas: 100% (71829/71829), done. brook@vista:~/qemu$ cd busybox brook@vista:~/qemu/busybox$ make defconfig scripts/kconfig/conf -d Config.in * * Busybox Configuration ...(略) Use the klogctl() interface (FEATURE_KLOGD_KLOGCTL) [Y/n/?] (NEW) y logger (LOGGER) [Y/n/?] (NEW) y brook@vista:~/qemu/busybox$ sed -i 's/.*CONFIG_STATIC.*/CONFIG_STATIC=y/' .config brook@vista:~/qemu/busybox$ make CFLAGS="-m32" LDFLAGS="-m32" all scripts/kconfig/conf -s Config.in # # using defaults found in .config # ...(略) DOC busybox.1 DOC BusyBox.html brook@vista:~/qemu/busybox$ file busybox busybox: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=0x87675efbb7f7f810a462113cb2913bab73ffb1b6, stripped brook@vista:~/qemu/busybox$ cd ..x brook@vista:~/qemu$ ./create_initrd_by_linux_script.sh + INITD=initrd + rm -rf initrd + mkdir -p initrd/sbin initrd/bin initrd/sys initrd/tmp initrd/dev initrd/proc + mkdir -p initrd/usr/sbin initrd/usr/bin initrd/etc/init.d + install -m 0755 busybox/busybox initrd/bin + install -m 0755 init initrd/ + ln -s ../bin/busybox initrd/sbin/mdev + ln -s busybox initrd/bin/sh + ln -s busybox initrd/bin/mkdir + ln -s busybox initrd/bin/mount + ./linux/scripts/gen_initramfs_list.sh -d initrd + ./linux/usr/gen_init_cpio /tmp/brook_initramfs_list brook@vista:~/qemu$ qemu-system-i386 -kernel linux/arch/x86/boot/bzImage -initrd initrd.img
create_initrd_by_linux_script.sh
#!/bin/bash INITD="initrd" rm -rf ${INITD} mkdir -p ${INITD}/sbin ${INITD}/bin ${INITD}/sys ${INITD}/tmp ${INITD}/dev ${INITD}/proc mkdir -p ${INITD}/usr/sbin ${INITD}/usr/bin ${INITD}/etc/init.d install -m 0755 busybox/busybox ${INITD}/bin install -m 0755 init ${INITD}/ ln -s ../bin/busybox ${INITD}/sbin/mdev ln -s busybox ${INITD}/bin/sh ln -s busybox ${INITD}/bin/mkdir ln -s busybox ${INITD}/bin/mount ./linux/scripts/gen_initramfs_list.sh -d ${INITD} > /tmp/brook_initramfs_list ./linux/usr/gen_init_cpio /tmp/brook_initramfs_list > initrd.img