env config
ubuntu 18.04 amd64
gcc-8
works on ubuntu 16.04 and 18.04
1 2 3 4
| sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-8 g++-8 gcc-8 --version
|
clang
1 2 3 4 5 6 7 8 9
| R=348261 svn co -r $R http://llvm.org/svn/llvm-project/llvm/trunk llvm cd llvm (cd tools && svn co -r $R http://llvm.org/svn/llvm-project/cfe/trunk clang) (cd projects && svn co -r $R http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt) mkdir llvm_cmake_build && cd llvm_cmake_build cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON ../ make -j64 clang export KMSAN_CLANG_PATH=`pwd`/bin/clang
|
文档里-j64
真的奢华…
qemu kvm
这部分推荐手动编译最新版本/较新版本,直接apt安装的版本有点老,后面可能有影响。
基本没啥坑,就是耗时耗力 :(
build kernel
mainline
1 2 3
| make menuconfig cp path/to/config .config make bzImage -j2
|
linux-next
一样的编译过程,next只是代码比较激进的版本
1 2 3
| make menuconfig cp path/to/config .config make bzImage -j2
|
kmsan
跟着readme走就行了
遇到一个坑点,
1 2 3
| export KMSAN_CLANG_PATH=`pwd`/bin/clang ... make CC=$KMSAN_CLANG_PATH -j64 -k 2>&1 | tee build.log
|
直接这么编译有问题,试了几次都不行,提示说编译器不支持xxxx这类问题。
最后我尝试了:
1
| export CC=/path/to/clang
|
之后直接编译就没问题了
这个版本我后面弄了个更新版本的clang也可以直接编译过。
ktsan
编译没啥坑,就是注意.config
文件别乱改。
1 2 3 4 5 6 7
| git clone https://github.com/google/ktsan.git cd ktsan/ make defconfig make kvmconfig scripts/config -e KTSAN -e SLAB -d SLUB -e DEBUG_INFO yes '' | make oldconfig make -j2 LOCALVERSION=-tsan
|
run kernel
创建文件系统
1 2 3 4 5 6 7 8 9
| IMG=qemu-image.img DIR=mount-point.dir qemu-img create $IMG 10g mkfs.ext2 $IMG mkdir $DIR sudo mount -o loop $IMG $DIR sudo debootstrap --arch amd64 jessie $DIR sudo umount $DIR rmdir $DIR
|
这样直接创建不行,需要在取消挂载之前设置好新文件系统里的用户名密码。
1
| sudo chroot mount-point.dir /bin/bash
|
进去之后,直接修改root密码就行了
其实还能做其他的设置,但是只是为了验证加载的内核是否正常,只需要登录进去就ok了。
基本上都能用这个命令起来
1 2 3 4 5 6 7
| sudo qemu-system-x86_64 \ -enable-kvm \ -m 2G -smp 2 \ -hda qemu-image.img \ -kernel linux-5.4-rc4/arch/x86/boot/bzImage \ -append "debug root=/dev/sda console=ttyS0" \ -nographic
|
除了ktsan
1 2 3 4 5 6 7
| qemu-system-x86_64 \ -drive file=qemu-image.img,index=0 \ -m 24G -smp 4 \ -net user,hostfwd=tcp::10022-:22 -net nic \ -nographic \ -kernel arch/x86/boot/bzImage -append "console=ttyS0 root=/dev/sda rw debug earlyprintk=serial slub_debug=QUZ"\ -enable-kvm -cpu host
|
我用它wiki里的命令无法成功启动,各种panic,或者就是文件系统挂载出问题,我换了我原本的ext2的img之后多试几次,就能正常工作了。
我这里给的是24G
内存。
reference
ktsan
kmsan
linux-kernel