编译内核-新增Linux系统调用过程_第1页
编译内核-新增Linux系统调用过程_第2页
编译内核-新增Linux系统调用过程_第3页
编译内核-新增Linux系统调用过程_第4页
编译内核-新增Linux系统调用过程_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、题目:

新增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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论