Prepare
自己动手开发一个操作系统?现代工具给我们提供了无限便利, 只要有一台个人电脑。 首先,假设你的电脑安装了Linux系统,比如Ubuntu。 其次,你想要你开发的操作系统运行在什么样的电脑上?这里假设目标平台是RISC-V。 为什么选择这个平台?因为这个平台足够新颖,你使用的电脑几乎不可能是RISC-V的, 所以,选这个平台能足够说明问题。 这是否意味着你需要购买一台RISC-V电脑?不,你不需要。你可以用软件模拟一台RISC-V 电脑,这需要用到qemu: sudo apt install qemu-system-misc 接下来还需要一个交叉编译器。默认编译器编译出的程序只能运行在和你使用的电脑架构 相同的电脑上,例如Intel。我们需要一个编译出的程序能运行在RISC-V平台上的编译器: sudo apt install gcc-riscv64-linux-gnu 测试以下。 #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } 用交叉编译器编译: riscv64-linux-gnu-gcc -o hello hello.c 编译成功后,你如果尝试运行这个程序,系统会告诉你无法运行。原因很简单:这个程序希望 运行在RISC-V平台上,但你的电脑不是。 那么这个程序能运行在qemu模拟出的RISC-V电脑上吗?当然可以,但有一个前提:模拟出的 RISC-V电脑上有操作系统。通常的做法是在模拟出的电脑上安装一个操作系统,然后再运行 这个程序,但这太麻烦了。qemu还个强大的功能:用户空间模拟。这需要安装一个qemu模块: sudo apt install qemu-user 测试: qemu-riscv64 -L /usr/riscv64-linux-gnu hello 你如果看到了"Hello, World!",那么恭喜你,你的程序已经在一台RISC-V电脑上运行了! 你甚至还可以使用gdb调试你的程序,虽然它运行在一台虚拟的RISC-V电脑里。 sudo apt install gdb-multiarch 以调试模式运行hello: qemu-riscv64 -L /usr/riscv64-linux-gnu -g 1234 hello 用gdb连接: gdb-multiarch hello target remote :1234
V2ray Install
v2ray install script
N100 Ax101 Driver
apt source linux-image-unsigned-$(uname -r) # Modify drv.C cd drivers/net/wireless/intel/iwlwifi make -C /lib/modules/`uname -r`/build M=`pwd` modules sudo cp iwlwifi.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/intel/iwlwifi/ sudo cp mvm/iwlmvm.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/intel/iwlwifi/mvm sudo cp dvm/iwldvm.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/intel/iwlwifi/dvm/ Intel Alder Lake-N100 wifi and bluetooth issues 参考文献: Build Your Own Kernel How do I add an include path for kernel module makefile
Dpdk
dpdk/lib/net/rte_ether.h rte_vlan_strip(rte_vlan_insert(m) != m != rte_vlan_insert(rte_vlan_strip(m)) rte_vlan_insert的参数为什么是 struct rte_mbuf **, 而不是struct rte_mbuf *?
Vscode Debug
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "sourceFileMap":{ "./libio": "/usr/src/glibc/glibc-2.35", "./malloc": "/usr/src/glibc/glibc-2.35", "./misc": "/usr/src/glibc/glibc-2.35", "./stdlib": "/usr/src/glibc/glibc-2.35", "./elf": "/usr/src/glibc/glibc-2.35", "./nptl": "/usr/src/glibc/glibc-2.35", ".": "/usr/src/glibc/glibc-2.35" }, "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/hello", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: gcc build active file" } ] }