版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、题目:
新增Linux系统调用
(1)需要重新编译Linux内核
(2)增加一个Linux的系统调用
(3)写一个用户程序进行调用测试。
系统调用实现的功能:计算一个数字的三次方,并打印出来。
二、版本:
编译版本:WinlO上虚拟机(VirtualBox)Ubuntu(64bit)15.04系统
原内核版本:
编译的新内核源码版本
不同内核版本,32位和64位文件位置以及文件名可能有所不同,添加系统调用时要根据自己的版
本的文件位置和文件名修改相应的三个文件。
三、步骤:
1.前期准备1下载内核及解压
1.1下载内核:
5.N3UE演行|-OradeVMVirtues
A;门国MD16:09
ProtocolLocationLatestStableKernel:
HTTPhttps://www.kernelorg/pub/
GThttps://gitkemeLorg/
RSYNCrsync://r5)ncJccrncLorg/pub/®4.3.3
mainline:4.4-rc82060103[tar.xz][pgp][patch](viewdrff][browsej
stable:4.3.32015-12-15[taroz][pgp](patch)(inc.patch)(viewdiff][browse](changelog]
stable:4.2,8[EOL]2015-12-15[tarjcz][pgp][patch](inc.patch)(viewdiff][browse)(changelog]
longterm:4.1.15201512-15[tarja][pgp](patch](inc.patch][viewdiff][browse)(changelog]
longterm:3.18.252015-12-15[tar.xz][pgp][patch][inc.patch)[viewdiff][browsej[changetogj
tongterm:3.14.582015-1209[tarja][pgp](patch](inc.patch)(viewdiff][browse)(changelog]
kxigterm:3.12.512015-11-25[tar.xz][pgp][patch][inc.patch)[viewdiff][browsej[changelog]
(ongterm:3.10.942015-12-09[tarjcz][pgp][patch][inc.patch)(viewdiff][browsej(changelog]
longterm:3.4.1102015-10-22(tarjcz)[pgp](patch](inc.patch)(viewdiff][browse)(changelog]
Flonqterm:3.2.7512015-12-30|[iar.xz][pgp](patch](inc.patch](viewdiff][browse](changelog)
longterm:2.6.32.692015-12-05(tarja](pgp][patch](inc.patch)(viewdiff][browse](changelog]
Unux4iext:next-201601062016-0106(browse)
OFirefoxautomaticallysendssomedatatoMozillasothatwe3nimproveyourexperience.ChooseWhatISharex
pVMvia
A■■田G)16:10
TheLinuxKernelArchives-MozillaFirefox
r。kerneLorgQSea心a©小俞彦三
GIT
RSYNCOpeningUnux-3.2.75.tar.xz.3.3
Youhavechosentoopen:
BUnux-3-2.75.tar.xz
whichis:XZ归档文件(62.6MB)
4.4-rc8
malnbne:from:wse]
stable:4.3.3wse](changelog]
WhatshouldFirefoxdowiththisfile?
stable:4.2.8(ECrwse][changetog]
longterm:4.1.15Openwith归档管理H(default)wse][changelog]
Longterm:3.18.25|•gave「ilc二如se](chanqek)Q]
longterm:3.14.58>wse)[changelog)
longterm:3.12.510Oothis4utom4ticellyforfilestikethisfromnowon.)wse](changelog]
longterm:3.10.94>wse][changelog]
longterm:3.4.110>wse][changelog]
longterm:3.2.75Cancelwse][changelogj
alongterm:
Unux-next:next-201601062016-01-06[browse]
。FirefoxautomatkaHyvendssomedatatoMozillasothatwecanimproveyourexperience.£hooseWhatIShare*
I
1.2翻开终端获得权限
Q…In^pIn-VlrtualRox:~
Torunacommandasadministrator(user"root"),use"sudo<command>".
See"nansudo_root"fordetails.
ln@ln-VlrtualBox:~SIsud。passwdrootI当三处是需要输入密码的只是不可见所以看不到而
[sudo]passwordforIn:ii-
输入新的UNIX密码:!-----
重新输入新的UNIX密码:匚]
passwd:已成功更新密码
ln01n-VtrtualBox:-$|
然后再输入SU输入刚刚设置的密码。
Ingin-VirtualBox:"$(「1
索山•
13移动文件并解压
1HMLEEfl行】-OradeVMV
世理a
1f,E6)16:181
ln(9*n-Virt«alBox:~
Torunaconnandasadministrator(user"root"),usew$udo<coHiMnd>M.
See"Ransudoroct"fordetails.
❽❷6T«
G主文件央Ttt
0最近使用的
主文件夹
奇而
SM
00片
D文梢
Q.连格利豳努腐
入'◎卬,
⑪e”■金却«:人@力■9.06/为
卜载目录
◎、*syscaUs.h(/usr/src/linux-3.2.75/indude/linux)-gedit
,1打开▼目保存aA撤消qv值增।n%
♦syscalls.hx
asmltnkagelongsys_name_to_handle_at(intdtd,constchar_user*name,
structfile_handle_user
♦handle,
int_user*rnt_id,intflag);
asmltnkagelongsys_open_by_handle_at(tntmountdirfd,
structftle_handle_user
•handle,
intflags);
asmltnkagelongsys_setns(intfd,intnstype);
asmltnkagelongsys_process_vm_readv(ptd_tptd,
conststructiovec_user*lvec,
unsignedlongliovcnt,
conststructiovec_user*rvec,
unsignedlongriovcnt,
unsignedlongflags);
asmltnkagelongsys_process_vm_writev(pid_tpid,
conststructiovec_user*lvec,
unsignedlongliovcnt,
conststructiovec_user*rvec,
unsignedlongrtovcnt,
unsignedlongflags);
asmltnkagelongsys_lnlClongn);
»endif
C/C++/ObjC头文件v制表符宽度:8y行859,列33插入
在文末粕ndif前添加函数声明。然后保存关闭。
2.3添加系统调用号
(gedit:3190):dconf-WARNING**:failedtocommitchangestodconf:连接已关闭___
root@ln-VtrtualBox:/usr/src/ltnux-3.2.75/tncl.ude/ltnux#cd'/usr/src/ltnux-3.2.7
5/arch/x86/include/asn'geditunistd_64.h红色划掉出不打打错,
root0ln-VirtualBox:/usr/src/ltnux-3.2.75/arch/x86/tnclude/asn#geditunistd_64.h
O/*unistd_64.h(/usr/src/llnux-3.2.75/arch/x86/include/asm)-gedit
,眇打开▼fil保存S6撤消令V*聃\X/
*unistd_64.hx
fFMC1LHCJ>VV
_SYSCALL(_NR_syncfs,sys_syncfs)
ffdeftne_NR_sendmmsg307
_SYSCALL(_NR_sendmmsg,sys_sendmmsg)
^define_NR_setns308
_SYSCALL(_NR_setns,sys_setns)
#define_NR_getcpu309
_SYSCALL(_NR_getcpu,sys_getcpu)
#define_NR_process_vm_readv310
_SYSCALL(_NR_process_vm_readv,sys_process_vm_readv)
#define_NR_process_vm_writev311
_SYSCALL(_NR_process_vn_writev,sys_process_vm_writev)
soenne_NR_I"
_SYSCALL(_NR_lnl,sys_lnl)|
#tfndef_N0_STUBS
#define_ARCH_WANT_OLO_READDIR
^define_ARCH_WANT_OLD_STAT
^define二ARCH二WANT二SYS二ALARM
#define_ARCH_WANT_SYS_GETHOSTNAME
#define_ARCH_WANT_SYS_PAUSE
#deftne__ARCH_WANT_SYS_SGETMASK
#define_ARCH_WANT_SYsZsICNAL
C/C++/ObjC头文件”制表符宽度:8▼行690,列28插入
因为前一个系统调用号是311所以这里我们写312
❽0危*unlstd_64.h(/usr/src/linux-3.2.75/arch/x86/indude/asm)-gedit
,声打开▼氏保存,A撤消"v
:*unistd_64.hx
#define_ARCH_WANT_SYS_OLD_GETRLIMIT
ffdeftne_ARCH_WANT_SYS_OLD_UNAME
/define_ARCH_WANT_SYS_OLDUMOUNT
#dcfinc__ARCH_WANT_SYS_SIGPENDINC
#define_ARCH_WANT_SYS_SIGPROCMASK
"define_ARCH_WANT_SYS_RT_SIGACTION
#deftne__ARCH_WANT_SYS_ROIGSUSPEND
#define_ARCH_WANT_SYS_TIME
#deftne_ARCH_WANT_COMPAT_SYS_TIME
#endif/*_NO_STUBS*/
#tfdef_KERNEL_
#ifndefCOMPILE.OFFSETS
#tnclude<asm/asm-offsets.h>
^defineNR_syscalls(_NR_syscall_max+
#endif
/*
*"Conditional"syscalls
*
*Whatwewantis_attribute_((weak,alias("sys_ni_syscall"))),
*butitdoesn'tworkonalltoolchatns.sowelustdoitbvhand
C/C++/ObjC头文件Y制表符宽度:8▼行720,列43插入
将原本的#defineNRsyscalls(_NR_syscallmax+1)
修改为:#defineNR_syscalls(_NR_syscall_max+2)
然后保存,关闭。
3.编译内核
3.1安装根本编译器套件
root@ln-Vt.rtual.Box:/usr/src/ltnux-3.2.75/arch/x86/t.nclude/asn«cd'/usf/src^ltnux-.75,
---------
[root^ln-Virtual.Box:/usr/src/linux-3.2.75#apt-getinstallbuild-essentialkernel-package|
IltbncursesS,devf^keroot,____________________
推荐安装的软件包:
uboot-mktnage
下列【新】软件包将被安装:
dblatexdocbook-dsssldocbook-utilsdocbook-xmldocbook-xslfonts-lmodern
fonts-texgyrejadetexkernel-commonkernel-packageHbflle-hcnedtr-perl.
Itbftle-which-perllibjs*jqueryllbnatl-sendnatI-perlltbncurses5-devItbospS
libostylelczItbpotraceOlibptexenclItbrubyZ.lltbsgnls*perlItbsplcZlibsynctexi
libsys-hostname-long-perlllbttnfo-devltbxnl.2-utilsltbyanl-e-2ltbzztp-8-13Imodern
lynxlynx-curopenjadepo-debconfpreview-latex-styleprosperpsZepsrubyrubyZ.l
rubygems-integrationsgml-datasgmlsplsptex-commontex-gyretexltvetexlive-base
texlive-bibtex-extratexlive-binariestexlive-extra-utilstexlive-font-utils
texlive-fonts-recommendedtexlive-fonts-recommended-doctexlive-generic-recommended
texlive-latex-basetexlive-latex-base-doctexlive-latex-extratexlive-latex-extra-doc
texlive-latex-reconnendedtexlive-latex-recommended-doctexlive-nath-extra
texlive-picturestexlive-pictures-doctexlive-pstrickstexlive-pstrtcks-doctipa
xnltoxsltproc
升级了e个软件包,新安装了67个软件包,要卸笠e个软件包,有319个软件包未被升级。
I需要下到747MB的软件包。
解压缩后会消耗掉1,228MB的额外空间。
您希望继续执行吗?
3.2编译
3.1makemrproper去除以前配置(如果是第一次编译,不用执行此操作)
Ga合root@ln-VirtualBox:/usr/src/linux-3.2.75
(gedtt:3228):GLlb-GIO-CRITICAL**:g_dbus_connectton_regtster_object:assertion
'G_IS_DBUS_CONNECTION(connection)'failed
(gedit:3228):GLib-GIO-CRITICAL**:g_dbus_connection_register_object:assertion
'G_IS_DBUS_CONNECTION(connection)1failed
(gedtt:3228):GLib-GIO-CRITJCAL**:g_dbus_connectton_get_unique_nane:assertion
'G_IS_DBUS_CONNECTION(connection)'failed
(gedtt:3228):dconf-WARNlNG**:failedtocommitchangestodconf:连接已关闭
root@ln-Vi.rtualBox:/usr/src/linux-3.2.75/arch/x86/include/asm#Ed'/usr/src/linu
X-3.2.75'|
rooX^tn^VirtualBox:/usr/src/linux-3.2.75#Sakenrproper
CLEAN.不是第一次瑞诺需要打makenrproper
CLEANarch/x86/kernel/acpi/realnode
CLEANarch/x86/kernel/cpu
CLEANarch/x86/kernel
CLEANdic.h/x86/vdso
CLEANarch/x86/Itb
CLEANdrivers/gpu/drm/radeon
CLEANdrlvers/net/wan
CLEANdrivers/scsi/aic7xxx
CLEANdrtvers/tty/vti
3.2makemenuconfig配置内核(此史选择了默认配置)
正在设置ruby(l:2.1.0.4ubuntul)...
正在设置libruby2.1:amd64(2.1.2-2ubuntu3)...
'正在处理用于libc-btn(2.21-6ubuntu4)的触发器...
root@ln-VtrtualBox:/usr/src/l.tnux-3.2.75#Kake-menuconftg
3.3make编译内核
root@ln-VirtualBox:/usr/src/linux-3.2.75#make
如果电脑是双核那么也可以用make-j4代替make(双核编译会更快一些)
0礴
!***Endoftheconfiguration.
I***Execute'make'tostartthebuildortry'makehelp'.
|root@W-VlrtualBox:/usr/src八lnux-3.2.75#make-jf]
接下来就是漫长的等待过程,不过要随时注意是否编译过程中因有错误而停止。我的电脑用了两人
小时。
(也有教程里用的是makebzlmage和makemodules,makebzlmage+makemodules=make)
4.安装内核
4.1make
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上海三毛保安服务有限公司招聘217人备考题库附答案详解(能力提升)
- 公路科技创新制度
- 健康保障活动安全措施承诺书(9篇)
- 2026浙江省荣军医院特殊专业技术岗位招聘3人备考题库带答案详解(b卷)
- 四川大学华西厦门医院耳鼻咽喉-头颈外科招聘1人备考题库附答案详解(预热题)
- 教育机构诚信保障责任承诺书(3篇)
- 产品质量问题反馈及改善要求函7篇
- 2026陕西西安市高新第一学校招聘备考题库附参考答案详解(精练)
- 2026中国农业科学院油料作物研究所油料基因工程与转基因安全评价创新团队科研助理招聘1人备考题库附参考答案详解【综合题】
- 铁路公司列车调度信号确认制度未落实要执行双确认整改措施
- 2026四川广安市邻水县招聘县属国有企业领导人员4人笔试备考试题及答案解析
- 饮用水备用水源工程社会稳定风险评估报告
- 医护人员手卫生的重要性
- 危重患者感染控制
- 2025年电梯管理人员考试题及答案
- 江苏省交通设施代建合同范本
- 2026年及未来5年中国耐火粘土行业发展运行现状及投资战略规划报告
- T∕CIECCPA 125-2026 温室气体 产品碳足迹量化方法与要求 燃气-蒸汽联合循环发电产品
- 2025中国邮政集团有限公司重庆分公司社会招聘笔试试题附答案解析
- 汇川技术在线测评题及答案
- 2024版2026春新教科版科学三年级下册教学课件:第一单元 辨别方向 单元小结复习
评论
0/150
提交评论