# Add System Call to Arm64 Linux kernel with M2 Chip ## Environment - MBP with M2 chip (2023) - MacOS 13.3 (22E252) - Vmware with Ubuntu 64bit 22.04.3 arm-64 architecture ## Prepare **Download the Linux Kernel Archives** (https://www.kernel.org) **or using** ```shell wget -P ~/ https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.137.tar.xz ``` **Get into root mode** ```shell sudo su // or sudo -i ``` **Decompress files to /usr/src** ```shell tar -xvf linux-5.15.137.tar.xz -C /usr/src ``` **Update apt** ```shell sudo apt update && sudo apt upgrade -y ``` **Install package which can help us to build kernel** ```shell sudo apt install build-essential libncurses-dev libssl-dev libelf-dev bison flex -y ``` **Install vim** ```shell sudo apt install vim -y ``` **Clear package** ```shell sudo apt clean && sudo apt autoremove -y ``` ## Add system calls hello **Create directory** ```bash cd /usr/src/linux-5.15.137 mkdir hello cd hello ``` **Create hello.c** ```shell vim hello.c ``` **Content of hello.c** ```C #include <linux/kernel.h> #include <linux/syscalls.h> SYSCALL_DEFINE0(hello){ printk("Hello world!\n"); return 0; } ``` **Create Makefile under the same dir** ```shell vim Makefile ``` **Content of Makefile** ``` obj-y := hello.o ``` **Back to previous dir and open makefile** ```shell # 回上個目錄 cd .. # 打開此目錄下的 Makefile vim Makefile ``` **Find core-y and append the hello/ into it** ``` core-y := kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ hello/ ``` **Add system call to table and note the system call number** **----------- For ARM64 -----------** /usr/src/linux-5.15.137/include/uapi/asm-generic/unistd.h ```c // add your syscall #define __NR_hello 441 __SYSCALL(__NR_hello, sys_hello) ... // modify the total number 441 -> 442 #define __NR_syscalls 442 ``` /arch/arm64/include/asm/unistd.h ```c #define __NR_compat_syscalls number+1 ``` **------------------------------------** **Add asmlinkage long sys_hello(void); to syscalls.h** ```bash # 把目錄轉回去 cd /usr/src/linux-5.15.137 vim include/linux/syscalls.h #加入一行(這行直接加在檔案的最下面就好) 註: 在vim編輯檔案的時候 可以按shift+G就會跳到最後一行 asmlinkage long sys_hello(void); ``` ## Compile Kernel **make localmodconfig** ``` make localmodconfig #這邊會跳出一大堆問你要不要裝的套件,全部按enter跳過就好 ``` **Check processor number** ```bash nproc ``` **用幾核心去編譯** ```bash make -j12 ``` **如果要重新make,請先使用** ```bash make clean make -j12 ``` **Install Kernel** ```bash sudo make modules_install -j12 sudo make install -j12 ``` **Update boot loader and rboot** ```bash sudo update-grub reboot ``` **Check kernel version** ```bash uname -r ``` ## Issues **If kernel version doesn't update** ```shell vim /etc/default/grub GRUB_TIMEOUT_STYLE: hidden -> menu GRUB_TIMEOUT: 0 -> -1 update-grub reboot ``` **Make Failed --> Modify .config** ``` can't read modules.order: No such file or directory make:*** [Makefile:1544 __modinstpre] Error2 ``` ```shell sudo vim .config CONFIG_SYSTEM_TRUSTED_KEYS = "" CONFIG_SYSTEM_REVOCATION_KEYS = "" ``` **Make modules failed --> Install dwarves** ``` .tmp_vmlinux.btf: pahole(pahole) is not available Failed to generate BTF for vmlinux Try to disable CONFIG_DEBUG_INFO_BTF make:***[Makefile:1227:vmlinux] Error1 ``` ``` shell sudo apt-get install dwarves ``` ## Ref - TA's note: https://hackmd.io/aist49C9R46-vaBIlP3LDA?view
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.