日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

NeuSoft(2)添加系统调用

發布時間:2025/4/14 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NeuSoft(2)添加系统调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、下載內核
apt-get install linux-source
在/usr/src下


2、解壓內核
cd /usr/src


tar -jxvf linux-source-3.2.0.tar.bz2


將內核解壓到/usr/src
3、修改文件
a)/usr/src/linux-source-3.2.0/kernel/sys.c
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-3.2.0/kernel/sys.c

在文件最后添加
asmlinkage int sys_mycall(int number)
{
printk("這是我添加的第一個系統調用");
return number;
}
asmlinkage int sys_addtotal(int number)
{
int i=0,enddate=0;
printk("這是我添加的第二個系統調用");
while(i<=number)
enddate+=i++;
return enddate;
}
asmlinkage int sys_three()
{
printk("這是我添加的第三個系統調用");
return 0;
}


b)/usr/src/linux-source-3.2.0/arch/x86/kernel/syscall_table_32.S
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-3.2.0/arch/x86/kernel/syscall_table_32.S
然后在一列 .long sys_XXXX的下一行添加
.long sys_mycall
.long sys_addtotal
.long sys_three
并記住他們分別是第幾個.long sys_XXXX


c)/usr/src/linux-source-3.2.0/arch/x86/include/asm/unistd_32.h
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-3.2.0/arch/x86/include/asm/unistd_32.h
在一列#define __NR_XXXX NNN后添加幾行
#define __NR_mycall 349
#define __NR_addtotal 350
#define __NR_three 351
注意后面那個數字是接著上面那幾行下來的

d)/usr/src/linux-source-3.2.0/ubuntu/omnibook/Makefile
如果在后面編譯模塊時出現

ld: /ubuntu/omnibook/sections.lds: No such file: No such file or directory
make[2]: *** [ubuntu/omnibook/omnibook.o] Error 1
make[1]: *** [ubuntu/omnibook] Error 2
make: *** [ubuntu] Error 2
以上錯誤,則需要修改,不過我建議還是先改了再說
可以用右鍵管理員打開或者
gedit /usr/src/linux-source-3.2.0/ubuntu/omnibook/Makefile
找到下面兩行
#EXTRA_LDFLAGS += $(src)/sections.lds
EXTRA_LDFLAGS += $(PWD)/ubuntu/omnibook/sections.lds
調換一下‘#’的位置,如下
EXTRA_LDFLAGS += $(src)/sections.lds
#EXTRA_LDFLAGS += $(PWD)/ubuntu/omnibook/sections.lds


4、編譯內核
進入解壓目錄

cd /usr/src/linux-source-3.2.0

a)make mrproper //清除內核中不穩定的目標文件,附屬文件及內核配置文件
b)make clean //清除以前生成的目標文件和其他文件
c)make oldconfig// 采用默認的內核配置,如果這里出現選項,選擇默認的選項,就是方括號內的第一個字母,不過我這里沒出現選項


d)make bzImage //編譯內核,大概需要半小時
e)make modules //編譯模塊,大概需要兩小時,如果出現錯誤,看看是不是因為上面的第3步的d)沒做


f)make modules_install// 安裝模塊,比較快


5、復制內核
首先查看一下編譯好的內核版本,以便命名
打開 /lib/modules


里面應該多了一個純數字不帶"generic"的文件夾,那就是新內核版本號,我的是3.2.50
然后復制內核
cp /usr/src/linux-source-3.2.0/arch/i386/boot/bzImage /boot/vmlinuz-3.2.50-mykernel
6、創建 initrd文件
在創建之前先安裝必要的程序
apt-get install bootcd-mkinitramfs


mkinitramfs -o /boot/initrd.img-x.x.x
耐心等待創建完成


7、更新配置GRUB引導列表
可以用右鍵管理員打開/boot/grub/grub.cfg或者
gedit /boot/grub/grub.cfg
找到下面這種結構
menuentry 'Ubuntu, with Linux 3.2.0-27-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd1,msdos1)'
search --no-floppy --fs-uuid --set 71a50d19-caef-4dff-9a7a-57cb1bbfe0c2
linux /boot/vmlinuz-3.2.0-27-generic root=UUID=71a50d19-caef-4dff-9a7a-57cb1bbfe0c2 ro quiet splash
initrd /boot/initrd.img-3.2.0-27-generic
}
menuentry 'Ubuntu, with Linux 3.2.0-27-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd1,msdos1)'
search --no-floppy --fs-uuid --set 71a50d19-caef-4dff-9a7a-57cb1bbfe0c2
echo 'Loading Linux 3.2.0-27-generic ...'
linux /boot/vmlinuz-3.2.0-27-generic root=UUID=71a50d19-caef-4dff-9a7a-57cb1bbfe0c2 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.2.0-27-generic
}
復制一份在這些結構前粘貼,注意必須貼在

### BEGIN /etc/grub.d/10_linux ###

……

### END /etc/grub.d/10_linux ###

里面,并將粘貼出來的結構中的
linux /boot/vmlinuz-3.2.0-27-generic
initrd /boot/initrd.img-3.2.0-27-generic
改成你的內核文件地址和initrd文件地址
linux /boot/vmlinuz-3.2.50-mykernel
initrd /boot/initrd.img-3.2.50


最好把其他所有版本相關信息號改成3.2.50(新編譯的版本號),以便在Grub菜單選擇

比如改成

menuentry 'Ubuntu, with Linux 3.2.50' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

gfxmode $linux_gfx_mode

insmod gzio

insmod part_msdos

insmod ext2

set root='(hd0,msdos1)'

search --no-floppy --fs-uuid --set=root 500bcade-e187-4245-9d3e-e422dd61df83

linux /boot/vmlinuz-3.2.50-mykernel root=UUID=500bcade-e187-4245-9d3e-e422dd61df83 ro quiet splash $vt_handoff

initrd /boot/initrd.img-3.2.50

}

menuentry 'Ubuntu, with Linux 3.2.50-generic-pae (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

insmod gzio

insmod part_msdos

insmod ext2

set root='(hd0,msdos1)'

search --no-floppy --fs-uuid --set=root 500bcade-e187-4245-9d3e-e422dd61df83

echo 'Loading Linux 3.2.50 ...'

linux /boot/vmlinuz-3.2.50-mykernel root=UUID=500bcade-e187-4245-9d3e-e422dd61df83 ro recovery nomodeset

echo 'Loading initial ramdisk ...'

initrd /boot/initrd.img-3.2.50

}

注意檢查一下/boot/目錄下是否存在上面這兩個文件,如果沒有,證明上面的幾部還沒成功

還有就是這些menuentry的順序,有些系統啟動引導時會直接進入第一個menuentry,如果第一個menuentry不是你想進的內核,則需要在開機時按Shift進入GRUB引導菜單選擇內核。如果你的系統開機是直接打開GRUB引導菜單,則無所謂,選擇你想進的內核就行
8、
終端執行以下命令cd /boot
cp initrd.img-3.2.50 initrd-3.2.50.old
以上是備份initrid,下面是修改
depmod –a


update-initramfs -k 3.2.50 -c
cd /tmp
gzip -dc /boot/initrd.img-3.2.50 | cpio -id
touch lib/modules/3.2.50/modules.dep
find ./ | cpio -H newc -o > /boot/initrd.img-3.2.50.new
gzip /boot/initrd.img-3.2.50.new
cd /boot
mv initrd.img-3.2.50.new.gz initrd.img-3.2.50

9、重啟
重啟ubuntu,如果能進入系統,證明基本上沒問題了。
打開終端輸入
uname -a

10、檢查系統調用
打開編譯器,新建工程來測試
在main函數中使用syscall(函數號,參數)測試系統調用
比如
syscall(349,1);
syscall(350,10);
syscall(351);


編譯運行,然后打開終端輸入
dmesg -c
查看是否有添加系統調用成功信息

轉載于:https://www.cnblogs.com/shenerguang/p/3381491.html

總結

以上是生活随笔為你收集整理的NeuSoft(2)添加系统调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。