http://www.linuxidc.com/Linux/2013-06/85335p5.htm
就贴个网址了,懒得搬了。。
前面很顺利,在添加新的系统调用时有点不顺利,具体问题如下:
首先按照上面文章里添加好相关代码后,重新编译内核:
make mrproper
make menuconfig
make dep
make clean
make bzImage
make modules
make modules_install
mkinitramfs -o /boot/initrd.img-3.9.4.syscall 3.9.4
make install
修改grub(或者update-grub)
重启后发生了 could not load /lib/modules/3.9.4.syscall/modules.dep 的问题,百度如下解决:
进入原内核,删除之前生成的initrd.img-3.9.4.syscall,执行 update-initramfs -c -k 3.9.4.syscall
ok,解决了!
下次直接update-initramfs -c -k 3.9.4.syscall 就好了,不用mkinitramfs
http://hi.baidu.com/hexi1985/item/3b11df296dad68f951fd8753
linux.3.9.4/arch/x86/kernel/entry_32.S
这是系统调用的过程,但其中说到的sys_call_table不知道在哪找。。。3.9.4内核中找不到syscall_table_32.S
http://www.cnblogs.com/zhuyp1015/archive/2012/05/29/2524936.html
1、查看当前系统内核版本 uname -a
2、运行主目录下面的test,测试新加入的系统调用,运行完执行sudo dmesg -c 查看输出的学号信息
3、用qemu模拟linux:在主目录下 qemu -kernel /usr/src/linux-3.9.4/arch/x86/boot/bzImage -initrd busyboxinitrd16M.img -append "root=/dev/ram init=/bin/ash"
模拟器进入shell界面,ls查看根目录下文件,运行根目录下动态编译的可执行文件hellodynamic,其运行需要的库在/lib/下
带grub的镜像:在主目录下 qemu -hda 32M.img