wolfman-88 / runninglinuxkernel_4.0

Linux 4.0 debug code for RunningLinuxKernel

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

        Linux kernel v4.0 code for <奔跑吧Linux内核>

微信号:runninglinuxkernel
微博/微信公众号:奔跑吧Linux内核

很多朋友反馈github下载太慢,我上传了一个不带git信息的网盘上:

https://pan.baidu.com/s/1jKkYIdo


内存是计算机最珍贵的资源,无论您是做Linux运维还是程序猿,不了解和理解内存管理,如空中楼阁,
知识总是比别人欠缺那么一点,如被别人掐住蛇的七寸,如何破解?不懂内存管理如何年薪百万呢?

笨叔视频特色:
1. 全球首个系统和深度介绍linux内存管理的视频节目,全球独家,独一无二,从入门到精通。
2. 打通职场任督二脉,迈向年薪百万
3. 图书+视频,全新学习模式
4. 电影级画质,广播级音质,全新视听享受,引领计算机视频节目新潮流
5. 笨叔笨色出演,绝非电脑录屏

欢迎来笨叔的淘宝店来 拍打笨叔叔:
https://shop115683645.taobao.com/

1. 目的:
    * 《奔跑吧linux内核》第6章里提供了一个使用QEMU来单步调试ARM32/ARM64的Linux内核的实验平台,但是默认内核编译的时候默认使用“-02”的GCC编译优化选项,
    那么导致在QUMU+GDB调试环境中出现光标乱跳以及无法打印有些变量的值“<optimized out>”等问题。本git tree就是为了解决该问题,在Makefile中修改GCC的优化选项为“-O0”。
    本git tree仅仅是为了提供一个好用的单步调试环境,不适用于其他用途。
    * 另外还内置了编译好的busybox小文件系统,方便读者快速编译和调试内核。
    * git tree中上传了《奔跑吧Linux内核》第6章关于QEMU+GDB+eclipse调试内核的样章。
    * 集成了SystemTap工具和例子.


2. 使用方法:
   本实验是在Ubuntu 16.04上完成的,使用其他版本的Linux发行版遇到编译问题请自行解决了。
   
   $ sudo apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gdb-arm-none-eabi gcc-aarch64-linux-gnu eclipse-cdt libdw-dev systemtap systemtap-runtime
   
   编译ARM32内核:
   $ export ARCH=arm
   $ export CROSS_COMPILE=arm-linux-gnueabi-
   $ cd _install_arm32/dev/
   $ sudo mknod console c 5 1  (注意,不要遗漏该步骤)
   $ cd runninglinuxkernel_4.0
   $ make vexpress_defconfig (在runninglinuxkernel_4.0目录下输入make命令)
   $ make bzImage –j4 
   $ make dtbs
   
   运行ARM32内核:
   $ qemu-system-arm -M vexpress-a9 -smp 4 -m 1024M -kernel arch/arm/boot/zImage  -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" 
       -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic
   
   编译ARM64内核:
   $ export ARCH=arm64
   $ export CROSS_COMPILE= aarch64-linux-gnu-
   $ cd _install_arm64/dev
   $ sudo mknod console c 5 1  (注意,不要遗漏该步骤)
   $ cd runninglinuxkernel_4.0 
   $ make defconfig (在runninglinuxkernel_4.0目录下输入make命令)
   $ make –j4 
   
   注意: 由于ubuntu 16.04里没有aarch64的gdb, 建议下载和安装 linaro官方网站上编译好的工具链:
   https://releases.linaro.org/components/toolchain/binaries/5.4-2017.01/aarch64-linux-gnu/gcc-linaro-5.4.1-2017.01-i686_aarch64-linux-gnu.tar.xz
   
   
   运行ARM64内核:
   $ qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 –smp 2 -kernel arch/arm64/boot/Image --append "rdinit=/linuxrc console=ttyAMA0"
      
   调试内核请见pdf文档。
   
3. SystemTap实验
   内置编译好SystemTap工具. ARM版本的内置在_install_arm32目录下, host工具内置在 tools/systemtap-host目录下.
   另外, modules_tools/systemtap目录下面有一些例子.
   
   编译hello-world.stp
   $ sudo /home/figo/work/runninglinuxkernel_4.0/runninglinuxkernel_4.0/tools/systemtap_host/bin/stap -gv -a arm -r /home/figo/work/runninglinuxkernel_4.0/runninglinuxkernel_4.0/ -B CROSS_COMPILE=arm-linux-gnueabi- -m hello-world.ko hello-world.stp
   (注意,上述有两个地方需要使用绝对路径)
   $ cp hello-world.ko _install_arm32
   $ make
   $ qemu-system-arm -M vexpress-a9 -m 1024M -kernel arch/arm/boot/zImage  -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic
     #在qemu里运行 staprun hello-world.ko
     
===============================================================================================================

 补充:
    《奔跑吧Linux内核》是基于ARM32/ARM64为蓝本的,有的小伙伴也希望能以“-O0”来编译x86的kernel image,笨叔叔修改了一下以满足这些小伙伴的需求。
    
    编译i386 kernel image:
        $ export ARCH=x86
        $ cd _install_x86/dev/
        $ sudo mknod console c 5 1  (注意,不要遗漏该步骤, 只需要一次即可)
        $ cd runninglinuxkernel_4.0
        $ make i386_defconfig (在runninglinuxkernel_4.0目录下输入make命令)
        $ make bzImage –j4 

     运行i386内核:
       $ qemu-system-i386 -kernel arch/x86/boot/bzImage -append "rdinit=/linuxrc console=ttyS0" -nographic
       
       
      编译x86_64 kernel image:
        $ export ARCH=x86_64
        $ cd _install_x86/dev/
        $ sudo mknod console c 5 1  (注意,不要遗漏该步骤, 只需要一次即可)
        $ cd runninglinuxkernel_4.0
        $ make x86_64_defconfig (在runninglinuxkernel_4.0目录下输入make命令)
        $ make bzImage –j4 

     运行x86_64内核:
       $ qemu-system-x86_64 -kernel arch/x86/boot/bzImage -append "rdinit=/linuxrc console=ttyS0" -nographic
       
       另外在使用gdb+qemu调试x86_64内核时,出现“Remote 'g' packet reply is too long”的错误,解决办法如下:
              下载gdb-7.8源代码,修改./gdb/remote.c +6066去掉如下几行:重新编译gdb
                       /* Further sanity checks, with knowledge of the architecture.  */
                //  if (buf_len > 2 * rsa->sizeof_g_packet)
                       //  error (_("Remote 'g' packet reply is too long: %s"), rs->buf);




    
 

About

Linux 4.0 debug code for RunningLinuxKernel

License:Other


Languages

Language:C 97.1%Language:C++ 1.2%Language:Assembly 0.5%Language:Objective-C 0.4%Language:Makefile 0.2%Language:Perl 0.1%Language:Roff 0.1%Language:Shell 0.1%Language:HTML 0.1%Language:Python 0.1%Language:Yacc 0.0%Language:Lex 0.0%Language:Scilab 0.0%Language:Awk 0.0%Language:UnrealScript 0.0%Language:M4 0.0%Language:CSS 0.0%Language:Tcl 0.0%Language:XS 0.0%Language:Perl 6 0.0%Language:Clojure 0.0%