uname -r
apt-cache search linux-source
sudo apt install linux-source-xxx
或者
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.gz
源码会被下载到/usr/src/ 目录下
sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
进入源码目录,配置编译选项:
cd linux-source-5.15.0/
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig #生成.config
make menuconfig
#buildroot中配置:
#make menuconfig KCONFIG_CONFIG=arch/arm64/configs/defconfig ARCH=arm64 CROSS_COMPILE=/home/buildroot-2023.11/output/ccwm/host/bin/aarch64-none-linux-gnu-
注意:如果你想用这个内核替换掉自己系统上的内核,要用 /boot/config- ( u n a m e − r ) 作为基础配置文件。可以使用 c p / b o o t / c o n f i g − (uname -r) 作为基础配置文件。可以使用 cp /boot/config- (uname−r)作为基础配置文件。可以使用cp/boot/config−(uname -r) .config
将已有的配置文件拷贝到编译目录中,然后再运行 make menuconfig
开启
Kernel hacking
—> [] Kernel debugging Compile-time checks and compiler options
—> [] Compile the kernel with debug info
[*] Provide GDB scripts for kernel debugging
关闭
Kernel Features --->
[ ] Randomize the address of the kernel image //取消内核内存地址随机化,不同内核通过搜索RANDOMIZE_BASE查找
编译内核
make ARCH=arm64 Image -j8 CROSS_COMPILE=aarch64-linux-gnu-
#如果是在buildroot中编译:
#make KCONFIG_CONFIG=arch/arm64/configs/defconfig ARCH=arm64 CROSS_COMPILE=/home/buildroot-2023.11/output/ccwm/host/bin/aarch64-none-linux-gnu- -j
编译驱动 ko (这里其实不需要,调试的话还是把驱动编译到内核中,不用单独加载符号)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules -j8
make M=DIR modules #DIR 是驱动源码的地址
https://download.qemu.org/qemu-6.2.0.tar.xz
https://download.qemu.org/qemu-7.2.8.tar.xz
https://download.qemu.org/qemu-9.0.2.tar.xz
#编译依赖
sudo apt-get install libcap-ng-dev libattr1-dev
sudo apt-get install -y ninja-build libpixman-1-dev libglib2.0-bin libglib2.0-dev
sudo apt-get install libsdl2-dev
编译
mkdir build
cd build
../configure --enable-virtfs
make -j
sudo make install
如果是qemu支持mesa :
依赖
sudo apt-update
sudo apt-get install libsdl2-2.0
sudo apt-get install libsdl2-dev
sudo apt-get install libepoxy-dev
编译支持mesa的qemu
mkdir ~/myqemu && cd ~/myqemu
git clone https://github.com/kjliew/qemu-3dfx.git
cd qemu-3dfx
wget https://download.qemu.org/qemu-7.2.8.tar.xz
tar xf qemu-7.2.8.tar.xz
cd qemu-7.2.8
rsync -r ../qemu-0/hw/3dfx ../qemu-1/hw/mesa ./hw/
patch -p0 -i ../01-qemu72x-mesa-glide.patch
bash ../scripts/sign_commit
mkdir ../build && cd ../build
#../qemu-7.2.8/configure --enable-virtfs
#../qemu-7.2.8/configure --enable-virtfs --enable-kvm --enable-debug --enable-gtk --target-list=aarch64-softmmu --enable-virglrenderer --enable-opengl
../qemu-7.2.8/configure --enable-virtfs --enable-kvm --target-list=aarch64-softmmu --enable-opengl --enable-sdl
make -j
#安装 系统目录
make install
安装home目录
make DESTDIR=~/local install
https://blog.csdn.net/stray2b/article/details/123487106
sudo apt install gcc-aarch64-linux-gnu
aarch64-linux-gnu-gcc -v
https://busybox.net/downloads/busybox-1.36.0.tar.bz2
sudo apt install gdb-multiarch
make qemu
cd qemu
mkdir drivers
cp …/buildroot-2024.05.1/output/images/rootfs.ext2 ./
cp …/buildroot-2024.05.1/output/images/Image ./
cp …/buildroot-2024.05.1/output/build/linux-custom/vmlinux ./
/kernel-5.15/vmlinux
buildroot/output/rootfs/rootfs.ext2 #下面有rootfs.img的话直接复制rootfs.img
/kernel-5.15/arch/arm64/boot/Image
要将一个ext2文件系统的镜像(rootfs.ext2)转换为一个可被QEMU等虚拟化平台识别的RAW镜像(rootfs.img),你可以使用qemu-img工具。以下是转换的命令:
qemu-img convert -f ext2 rootfs.ext2 -O raw rootfs.img
ext2不支持:
qemu-img convert rootfs.ext2 -O raw rootfs.img
#! /bin/sh
qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 -nographic -m size=2048M -cpu cortex-a72 -smp 2 -kernel Image -drive format=raw,file=rootfs.img -append "root=/dev/vda rw" --fsdev local,id=kmod_d,path=$PWD/drivers,security_model=none -device virtio-9p-device,fsdev=kmod_d,mount_tag=kmount -s -S
参数:
# nokaslr 是关闭随机地址,gdb调试随机地址导致无法正常调试
# -s 是-gdb tcp::1234 的简写,如果需要换端口可以用-gdb tcp::1234替换-s参数
# -S 是freeze cpu at startup的指令,也就是kernel 启动时就挂起,等待调试连接,如果不需要调试内核启动,这个参数也可以去掉
--fsdev local,id=kmod_d,path=$PWD/drivers,security_model=none -device virtio-9p-device,fsdev=kmod_d,mount_tag=kmount
这段是qemu通过virtio-9p在host和guest之间共享文件,进入客户机后通过一下挂载以共享主机$PWD/drivers目录
mount -t 9p -o trans=virtio kmount /mnt
cpio
```bash
qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 -nographic -m size=2048M -cpu cortex-a72 -smp 2 -kernel Image -initrd rootfs123.cpio -append "root=/dev/vda rw " --fsdev local,id=kmod_d,path=$PWD/drivers,security_model=none -device virtio-9p-device,fsdev=kmod_d,mount_tag=kmount
qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt =m 2048M
-smp 4 -kerne
Image --append "rdinit=/linuxrc root=/dev/vda rw console=ttyAMA0 loglevel=8"
-nographic
--fsdev local,id=kmod dev,path=$PWD/drivers
security model=none
-device virtio-9p-device,fsdev=kmod dev,mount tag=kmod mount -gdb top:1580
-5
-s gdb端口1234
-gdb top:1580 自定义
qemu-img info image.img #查看镜像格式
qemu-system-aarch64 -machine help #查看支持的设备
qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 -m size=2048M -cpu cortex-a72 -smp 2 -kernel Image -drive format=raw,file=rootfs.img -append "root=/dev/vda rw nokaslr console=ttyAMA0" --fsdev local,id=kmod_d,path=$PWD/drivers,security_model=none -device virtio-9p-device,fsdev=kmod_d,mount_tag=kmount -monitor stdio
#!/bin/bash
ps -A | grep qemu-system- | awk '{print $1}' | xargs sudo kill -9
{
"name": "kernel debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/vmlinux",
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb-multiarch",
"miDebuggerServerAddress": "localhost:1234",
"sourceFileMap": {
"${workspaceFolder}/linux-source-5.15.0":"${workspaceFolder}/linux-source-5.15.0"
},
}
#!/bin/sh
qemu-system-aarch64 -M raspi3b -m 1G -nographic -drive format=raw,file=sdcard.img
qemu-system-aarch64 -M raspi3b -m 512M -kernel Image -dtb bcm2837-rpi-3-b.dtb -nographic -append "console=ttyAMA0" -sd rootfs.ext2
https://blog.csdn.net/glorydx/article/details/110958739
vscode 点击文件 --》首选项 --》 设置 --》 搜索 eol,改变eol为\n(指lf)或者改为(\r\n),有一个统一的标准就好了。
git在维护版本库的时候统一使用的是LF,这样就可以保证文件跨平台的时候保持一致。
在Linux下默认的换行符也是LF,那也就不存在什么问题。
在Windows下默认的换行符是CRLF,那么我们需要保证在文件提交到版本库的时候文件的换行符是LF,通常来说就是上面的两种方法。
如果你同事中有使用其它系统开发的
你需要先执行上面的操作,再行 以下代码才能解决
git config --global core.autocrlf false
https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz?rev=22c39fc25e5541818967b4ff5a09ef3e&hash=B9FEDC2947EB21151985C2DC534ECCEC
https://baijiahao.baidu.com/s?id=1790838461666993024&wfr=spider&for=pc
https://zhuanlan.zhihu.com/p/445453676
https://blog.csdn.net/charlie114514191/article/details/139800851
https://blog.csdn.net/liutit/article/details/140348601
https://blog.csdn.net/yanghao23/article/details/135892347
https://zhuanlan.zhihu.com/p/667525514
传输文件
https://blog.csdn.net/qq_44600038/article/details/130984640
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试