Hello world! 출력 커널 프로그래밍(32bit)
간략 버전
1. cd /usr/src/linux-2.6.32.60
2. arch/x86/kernel/syscall_table_32.S 추가 --> .long sys_hello_world /* 337 */
3. arch/x86/include/asm/unistd_32.h 추가 --> #define __NR_hello_world 337 추가(337 은 마지막 숫자(336) + 1)
4. kernel/hello_world.c 생성 -->
/* kernel/hello_world.c */ #include <linux/linkage.h> |
5. kernel/Makefile 수정
obj-y += groups.o hello_world.o # hello_world.o 추가 |
6. 커널 컴파일
# make mrproper && make clean && make menuconfig && make && make modules && make modules_install
7. 커널용 램디스크 생성
# cd /boot && mkinitramfs -o initrd.img-2.6.32.60 2.6.32.60
8. #update-grub && reboot
9. kernel include 링크 설정.
# cd /usr/include
# mv asm asm_bak
# mv linux linux_bak
# ln -sf /usr/src/linux-2.6.32.60/arch/x86/include/asm asm
# ln -sf /usr/src/linux-2.6.32.60/arch/x86/include/linux linux
10. 테스트 코드 작성 및 컴파일
$ cd ~
$ mkdir tmp
$ vi mysys.c
#include <linux/unistd.h> |
$ make mysys
$ ./mysys
11. 커널 로그 확인
$ dmsg
...
[ 4501.406221] Hello World!