编译linux内核
来源:互联网 发布:php密码破解 编辑:程序博客网 时间:2024/05/16 08:20
一、实验前的准备:
二、解压内核
tar xvf linux-2.6.32.71.tar
三、增加系统调用
打开sys.c文件。
gedit /usr/src/linux-2.6.32.71/kernel/sys.c
2、
在文件末尾增加系统调用。
asmlinkage intsys_mycall(int number)
{
printk("My Student No. is XXXXX,and My Name is XXXXX*** !");
return number;
}
注:printk就是系统调用输出一行文字,你可以自定义里面内容,便于最终检验。3、
注册系统调用:
gedit /usr/src/linux-2.6.32.71/arch/x86/kernel/syscall_table_32.S
在.long 类型文件末尾添加:
.longsys_mycall
并且按照顺序记住它属于第几个系统调用,在本机中为337。
4、gedit /usr/src/linux-2.6.32.71/arch/x86/include/asm/unistd_32.h
在一系列#define __NR_之后添加:
# define __NR_mycall 337
在这里就需要用到之前记住的数字了。
四、编译内核
进入解压目录:
cd /usr/src/linux-2.6.32.71
make mrproper
make clean
make oldconfig
make bzImage (这个过程和下面的过程非常非常非常长,亲测,建议泡杯茶,或是看个电影,没有两个小时不行)
make modules
make modules_install
五、拷贝内核
cp /usr/src/linux-2.6.32.71/arch/i386/boot/bzImage /boot/vmlinuz-2.6.32.71-mykernel
六、创建initrd文件
mkinitramfs-o /boot/initrd.img-2.6.32.71
七、更新grub引导表
gedit /boot/grub/grub.cfg
但必须在同一个
### BEGIN /etc/grub.d/10_linux ###
……
### END /etc/grub.d/10_linux ###
里面:
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro quiet splash
initrd /boot/initrd.img-2.6.35-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
echo 'Loading Linux 2.6.35-22-generic ...'
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-22-generic
}
八、收尾工作
cd /boot
cp initrd.img-2.6.32.71 initrd-2.6.32.71.old
depmod–a
update-initramfs-k 2.6.32.71 –c
cd /tmp
gzip-dc /boot/initrd.img-2.6.32.71| cpio –id
touch lib/modules/2.6.32.71/modules.dep
find./ | cpio -H newc -o > /boot/initrd.img-2.6.32.71.new
gzip /boot/initrd.img-2.6.32.71.new
cd /boot
mvinitrd.img-2.6.32.71.new.gz initrd.img-2.6.32.71
九、重启
linux-2.6.32.71,说明已经成功!
如下:
若是看到这个,你就可以大叫一声庆祝一下了,你已经成功啦!!!!
十、测试自定义系统调用
打开终端,键入gedit,打开gedit工具,继续键入如下代码:
#include<stdio.h>
int main()
{
syscall(337, 1);
return 0;
}
保存为mytest.c
再继续在终端中键入
gcc-o mytest mytest.c(编译C程序)
之后 ./mytest 。
点击运行编译出来的程序,此时并不会显示出效果,在终端中键入dmesg –c查看系统调用信息。
此时,你可以看到
- Linux内核:编译内核
- 【LINUX内核】LINUX内核编译
- Android编译 & Linux内核编译
- linux内核编译kernel编译
- Linux编译内核详解
- Linux编译内核详解
- linux内核编译
- 菜鸟编译Linux内核
- linux内核编译详解
- LINUX内核编译(ZT)
- Linux 内核编译 全功略
- 第一次编译linux内核
- linux内核编译步骤
- Linux内核编译步骤
- Linux 内核编译详解
- Linux内核编译详解
- Linux内核编译
- linux内核编译
- lis算法
- 素描绘画Sketch Touch
- hdu 3572 Task Schedule【网络流建图应用】
- Spring4.X系列之IOC
- Visual C++异常处理机制原理与应用(一)—— C/C++结构化异常处理之try-finally终止处理的使用与原理(上)
- 编译linux内核
- Algorithm3——最长公共子序列(LCS)
- day02-还是tkinter
- 《java编程思想》第5章
- 总结-2017/9/21
- HDU
- 2039-数据结构上机实验之二分查找
- 304. Range Sum Query 2D
- H3C无线控制器做用户隔离和DHCP Relay的注意事项