linux 内核实战
我报一个班学习linux内核源码, 经过学习我将知识点整理到了这里:
整理知识点链接1。
整理知识点链接2。
整理知识点链接3。
只能说我学到点表皮, 相信聚沙成塔。 如果你有兴趣学习,我可以为你推荐,老学员推荐新学员会有相应的折扣 加我QQ哈: 852897652.
编译内核找不到 linux-headers
# 在新的文件夹下
tar -xvf linux-5.6.14.tar.xz
cd linux-5.6.14/
make deb-pkg
#安装
dpkg -i linux-headers-5.6.14_5.6.14-1_amd64.deb
安装前
安装后
调试内核
sudo apt-get install qemu-system-aarch64
wget https://buildroot.org/downloads/buildroot-2021.08.tar.bz2
tar xvf buildroot-2021.02.4.tar.bz2
cd buildroot-2021.02.4
make menuconfig
Target options->AArch64(little endian)
Target options-> Target Architecture Variant (cortex-A57
Toolchain->Toolchain type 选择“External toolchain”:
Toolchain->Toolchain选择"Arm AArch64 2020.11”:
System configuration-> Enable root login with password, 并且设置root密码,这里设置为"adsf”:
System configuration-> Run a getty (login prompt) after boot->TTY port设置为"TTYAMA0"。
Target packages->选择Show packages that are also provided by busybox:
Target packages-> Debugging, profiling and benchmark可以选择自己感兴趣的工具,这里选择strace:
Filesystem images选择cpio the root filesystem (for use as an initial RAM filesystem):
cd $WORK_DIR/buildroot-2021.08
make
sudo apt install gcc-aarch64-linux-gnu
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.6.tar.xz
tar xvf linux-5.14.6.tar.xz
cd linux-5.14.6.tar.xz
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
在产生的linux-5.14.6/.config文件中修改以下三个选项:
CONFIG_CMDLINE="console=ttyAMA0"
CONFIG_INITRAMFS_SOURCE="/home/tom/hdd/linux-qemu/repos/buildroot-2021.08/output/images/rootfs.cpio"
CONFIG_DEBUG_INFO=y
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
在编译的过程中会出现需要用户配置选项的交互输入,则一路默认回车键,直到出现交互输入Built-in initramfs compression mode时,因为我们编译initramfs文件系统时,没有选择压缩模式,所以这里选择8:
在编译的过程中会出现需要用户配置选项的交互输入,则一路默认回车键,直到出现交互输入Built-in initramfs compression mode时,因为我们编译initramfs文件系统时,没有选择压缩模式,所以这里选择8:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-machine type=virt \
-nographic -smp 1 \
-m 2048 \
-kernel ./arch/arm64/boot/Image \
--append "console=ttyAMA0"
在这里就执行不起来了, 就没有继续参考了。
启动不起来。
问题提出链接
编译模块
我不知道这个原理,除红框的编译能通过
源码实战链接地址
内存进程
问题解决点:
将中文路径改为英文路径
设备驱动文件系统
问题解决点:
修改前:
修改后:
中断网络
问题解决点:
mv 第034讲\ 内核Netlink套接字/ netlink
cd netlink/
make
修改前:
修改后:
总结
- 升级Linux内核header
- 实战里面的实现逻辑我真的不会啊,我只是负责整理,后面再学习。
- 本想把这个实战分类到上面各标题处,后面补上。
- 红框还有编译错误,最近解决掉。