wiki:Dev/KernelHack

Version 30 (modified by mitty, 11 years ago) (diff)

--

tools

  • 4.3.5. Tracking Most Frequently Used System Calls
  • Kernel/CrashdumpRecipe - Ubuntu Wiki

    LKCD is a project that tries to enable enterprise style post-mortem crash analysis in Linux operating systems. It uses a special mode of kexec which allows to automatically boot a secondary kernel whenever a crash (Oops/panic) occurs. This secondary kernel will then save the state and memory of the primary kernel to a certain location of the filesystem (/var/crash on newer releases). This file can then be used by crash to gather detailed information about the problem.

how to build kernel

  • Ubuntuの場合、aptitude build-dep linuxでカーネルのビルドに必要なパッケージは導入される
    • 3.9.x以降をビルドする場合は、bcパッケージも必要
        BC      kernel/timeconst.h
      /bin/sh: 1: bc: not found
      make[3]: *** [kernel/timeconst.h] Error 127
      make[2]: *** [kernel] Error 2
      
  • カーネルソースを展開して、「make help」でmakeオプションが表示される

(example) build 3.6.1 on Ubuntu 12.04 and install to 12.10

  • ソースの入手
  • ビルド環境構築
    • mitty@precise:~$ sudo aptitude build-dep linux
    • mitty@precise:~/linux-3.6.1$ scp mitty@quantal64:/boot/config-3.5.0-17-generic .config
  • ビルド
    • mitty@precise:~/linux-3.6.1$ make oldconfig
      • $ make oldnoconfig -> Same as silentoldconfig but sets new symbols to their default value
    • mitty@precise:~/linux-3.6.1$ make -j9 deb-pkg
  • debパッケージのインストール
    • mitty@precise:~$ scp linux-image-3.6.1_3.6.1-3_amd64.deb mitty@quantal64:~
    • mitty@quantal64:~$ sudo dpkg -i linux-image-3.6.1_3.6.1-3_amd64.deb

how to enhancement kernel

debugging Linux Kernel with VMware Workstation

  • http://wiki.osdev.org/VMWare
    • Guest debugging
      • These options are valid in Workstation 6.0+, and should be set in the virtual machine's .vmx file.
        debugStub.listen.guest32 = "TRUE"
        debugStub.listen.guest64 = "TRUE"
        
      • If using these options, Workstation prints a message "VMware Workstation is listening for debug connection on port 8832." into the vmware.log file. Start a GDB session (using a copy of your kernel that includes debug information), then:
        target remote localhost:8832
        
      • Standard gdb commands work in this mode (e.g. printing memory, backtrace). Note that this is a debug stub attached to the KERNEL, not a userspace program.
      • Other useful options:
        debugStub.listen.guest32.remote = "TRUE" # Allows debugging from a different computer / VM instead of localhost. # The IP for remote debugging will be that of the host.
        debugStub.listen.guest64.remote = "TRUE" # Same, but for 64-bit code
        monitor.debugOnStartGuest32 = "TRUE" # Breaks into debug stub on first instruction (warning: in BIOS!) # This will halt the VM at the very first instruction at 0xFFFF0, you could set the next breakpoint to break *0x7c00 to break when the bootloader is loaded by the BIOS
        debugStub.hideBreakpoints = "TRUE" # Allows gdb breakpoints to work
        bios.bootDelay = "3000" # Delay booting the BIOS code.
        
  • windellはVistaとのデュアルブートなため、UTCではなくlocal timeでRTCが設定されている
    • Ubuntu インストール時に、UTCにすると時計が9時間進む

x86

x64

  • viola0[1-6]でビルドする場合、そのままではx86_64のカーネルが作られるので注意

Serial Console

  • http://qemu.weilnetz.de/qemu-doc.html#direct_005flinux_005fboot 3.9 Direct Linux Boot
  • ex) $ sudo qemu-system-x86_64 -m 512 -vnc :1 -kernel /boot/vmlinuz-3.5.0-45-generic -append "console=tty0 console=ttyS0,115200n8r" -serial stdio
    qemu-system-x86_64: pci_add_option_rom: failed to find romfile "pxe-rtl8139.rom"
    [    0.000000] Initializing cgroup subsys cpuset
    [    0.000000] Initializing cgroup subsys cpu
    [    0.000000] Linux version 3.5.0-45-generic (buildd@toyol) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #68-Ubuntu SMP Mon Dec 2 21:58:52 UTC 2013 (Ubuntu 3.5.0-45.68-generic 3.5.7.26)
    [    0.000000] Command line: console=tty0 console=ttyS0,115200n8r
    
    (smip)
    
    • マニュアルにはWhen using the direct Linux boot, a disk image for the first hard disk hda is required because its boot sector is used to launch the Linux kernel.とあるが、少なくともqemu-kvm-1.2.0+noroms-0ubuntu2.12.10.6, Debianでは不要な模様