Windows Dev Kit 2023 Install Ubuntu Kernel 6.18.0
因为之前的Linux内核编译时没有启用CONFIG_ANON_VMA_NAME, 不支持PR_SET_VMA_ANON_NAME. 所以想要再安装一个ubuntu官方编译的内核. 24年初给Windows dev kit 2023安装ubuntu时基本是按照这篇教程Windows Dev Kit 2023 Bootup瞎折腾的. 升级ubuntu官方构建的arm64 linux内核也遇到了一些问题, 根据回忆记录一下解决过程, 可能会有疏漏. 因为我不太熟悉linux编译与安装, 很多解决方案都是问的ai大模型, 能跑就行… 下载deb包 从Ubuntu Mainline Kernel PPA下载下面的deb包, 安装它们 $ ls linux-*.deb linux-headers-6.18.0-061800_6.18.0-061800.202511302339_all.deb linux-image-unsigned-6.18.0-061800-generic_6.18.0-061800.202511302339_arm64.deb linux-headers-6.18.0-061800-generic_6.18.0-061800.202511302339_arm64.deb linux-modules-6.18.0-061800-generic_6.18.0-061800.202511302339_arm64.deb 修改/etc/default/grub: GRUB_DEFAULT=saved GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=30 更新grub sudo update-grub grub选择新内核后自动跳回grub界面 猜测可能是ubuntu官方的arm64 deb没有提供dtbs, 先使用旧内核启动系统. 手动下载6.18源码,编译dtbs tar xf ~/Downloads/linux-6.18.tar.xz cd linux-6.18/ cp /boot/config-6.18.0-061800-generic .config make oldconfig make ARCH=arm64 dtbs 拷贝编译好的dtbs sudo cp -r arch/arm64/boot/dts/* /boot/dtbs/6.18.0-061800-generic cd /boot/ sudo ln -s dtbs/6.18.0-061800-generic/qcom/sc8280xp-microsoft-blackrock.dtb dtb-6.18.0-061800-generic 启动新内核后gnome登录后自动跳回登录界面 通过tty登录, 查看dmesg,发现报错提示找不到mbn文件. ...
f() vs f(void)
读完f() vs f(void) in C vs C++做的笔记. C中f()与f(void)区别 f()表示函数形参列表是未知的, 编译器不会帮你做检查. 可以看到gcc编译下面程序, 没有警告. $ cat test.c #include <stdio.h> void foo() { printf("foo\n"); } int main(void) { foo(1, 2, 3); } $ gcc ./test.c -std=c11 -O2 -Wall -Wextra -Werror -o test $ ./test foo f(void)才真正表示函数形参列表为空. $ cat test.c #include <stdio.h> void foo(void) { printf("foo\n"); } int main(void) { foo(1, 2, 3); } $ gcc ./test.c -std=c11 -O2 -Wall -Wextra -Werror -o test ./test.c: In function ‘main’: ./test.c:8:3: error: too many arguments to function ‘foo’ 8 | foo(1, 2, 3); | ^~~ ./test.c:3:6: note: declared here 3 | void foo(void) { | ^~~ 另外X86-64生成的机器指令也会受到影响. 可以看到下面的程序能够正常执行, faz与baz分别调用foo以及bar. ...