| | 1247 | |
| | 1248 | = 10/26 = |
| | 1249 | == add new system call (x86_64) (cont) == |
| | 1250 | * viola06:x86_64 s0711489$ svn revert include/linux/syscalls.h arch/x86/kernel/new_hello.c arch/x86/include/asm/new_hello.h |
| | 1251 | * viola06:x86_64 s0711489$ rm arch/x86/kernel/new_hello.c arch/x86/include/asm/new_hello.h |
| | 1252 | |
| | 1253 | * viola06:linux-2.6.35.14 s0711489$ svn merge i386/arch/ x86_64/arch/ -r1352:1359 |
| | 1254 | * viola06:linux-2.6.35.14 s0711489$ svn merge i386/include/ x86_64/include/ -r1358:1359 |
| | 1255 | * viola04:x86_64 s0711489$ vim arch/x86/include/asm/unistd_64.h |
| | 1256 | {{{ |
| | 1257 | Index: include/linux/syscalls.h |
| | 1258 | =================================================================== |
| | 1259 | --- include/linux/syscalls.h (revision 1367) |
| | 1260 | +++ include/linux/syscalls.h (revision 1368) |
| | 1261 | @@ -826,4 +826,6 @@ |
| | 1262 | unsigned long fd, unsigned long pgoff); |
| | 1263 | asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg); |
| | 1264 | |
| | 1265 | +asmlinkage long sys_new_hello(int i); |
| | 1266 | + |
| | 1267 | #endif |
| | 1268 | Index: include |
| | 1269 | =================================================================== |
| | 1270 | --- include (revision 1367) |
| | 1271 | +++ include (revision 1368) |
| | 1272 | |
| | 1273 | Property changes on: include |
| | 1274 | ___________________________________________________________________ |
| | 1275 | Added: svn:mergeinfo |
| | 1276 | Merged /trunk/coursework/KernelHack/linux-2.6.35.14/i386/include:r1359 |
| | 1277 | Index: arch/x86/kernel/syscall_table_32.S |
| | 1278 | =================================================================== |
| | 1279 | --- arch/x86/kernel/syscall_table_32.S (revision 1367) |
| | 1280 | +++ arch/x86/kernel/syscall_table_32.S (revision 1368) |
| | 1281 | @@ -337,3 +337,4 @@ |
| | 1282 | .long sys_rt_tgsigqueueinfo /* 335 */ |
| | 1283 | .long sys_perf_event_open |
| | 1284 | .long sys_recvmmsg |
| | 1285 | + .long sys_new_hello |
| | 1286 | Index: arch/x86/kernel/Makefile |
| | 1287 | =================================================================== |
| | 1288 | --- arch/x86/kernel/Makefile (revision 1367) |
| | 1289 | +++ arch/x86/kernel/Makefile (revision 1368) |
| | 1290 | @@ -131,3 +131,5 @@ |
| | 1291 | obj-$(CONFIG_PCI_MMCONFIG) += mmconf-fam10h_64.o |
| | 1292 | obj-y += vsmp_64.o |
| | 1293 | endif |
| | 1294 | + |
| | 1295 | +obj-y += new_hello.o |
| | 1296 | Index: arch/x86/kernel/new_hello.c |
| | 1297 | =================================================================== |
| | 1298 | --- arch/x86/kernel/new_hello.c (revision 0) |
| | 1299 | +++ arch/x86/kernel/new_hello.c (revision 1368) |
| | 1300 | @@ -0,0 +1,7 @@ |
| | 1301 | +#include <linux/kernel.h> |
| | 1302 | +#include <linux/syscalls.h> |
| | 1303 | + |
| | 1304 | +SYSCALL_DEFINE1(new_hello, int, i) { |
| | 1305 | + printk(KERN_DEBUG "new_hello() syscall with %d\n", i); |
| | 1306 | + return i; |
| | 1307 | +} |
| | 1308 | Index: arch/x86/include/asm/unistd_32.h |
| | 1309 | =================================================================== |
| | 1310 | --- arch/x86/include/asm/unistd_32.h (revision 1367) |
| | 1311 | +++ arch/x86/include/asm/unistd_32.h (revision 1368) |
| | 1312 | @@ -343,10 +343,11 @@ |
| | 1313 | #define __NR_rt_tgsigqueueinfo 335 |
| | 1314 | #define __NR_perf_event_open 336 |
| | 1315 | #define __NR_recvmmsg 337 |
| | 1316 | +#define __NR_new_hello 338 |
| | 1317 | |
| | 1318 | #ifdef __KERNEL__ |
| | 1319 | |
| | 1320 | -#define NR_syscalls 338 |
| | 1321 | +#define NR_syscalls 339 |
| | 1322 | |
| | 1323 | #define __ARCH_WANT_IPC_PARSE_VERSION |
| | 1324 | #define __ARCH_WANT_OLD_READDIR |
| | 1325 | Index: arch/x86/include/asm/new_hello.h |
| | 1326 | =================================================================== |
| | 1327 | --- arch/x86/include/asm/new_hello.h (revision 0) |
| | 1328 | +++ arch/x86/include/asm/new_hello.h (revision 1368) |
| | 1329 | @@ -0,0 +1,7 @@ |
| | 1330 | +#ifndef _ASM_X86_NEW_HELLO_H |
| | 1331 | +#define _ASM_X86_NEW_HELLO_H |
| | 1332 | + |
| | 1333 | +#include <asm/unistd.h> |
| | 1334 | +#define new_hello(x) syscall(__NR_new_hello, x) |
| | 1335 | + |
| | 1336 | +#endif /* _ASM_X86_NEW_HELLO_H */ |
| | 1337 | Index: arch/x86/include/asm/unistd_64.h |
| | 1338 | =================================================================== |
| | 1339 | --- arch/x86/include/asm/unistd_64.h (revision 1367) |
| | 1340 | +++ arch/x86/include/asm/unistd_64.h (revision 1368) |
| | 1341 | @@ -663,6 +663,8 @@ |
| | 1342 | __SYSCALL(__NR_perf_event_open, sys_perf_event_open) |
| | 1343 | #define __NR_recvmmsg 299 |
| | 1344 | __SYSCALL(__NR_recvmmsg, sys_recvmmsg) |
| | 1345 | +#define __NR_new_hello 300 |
| | 1346 | +__SYSCALL(__NR_new_hello, sys_new_hello) |
| | 1347 | |
| | 1348 | #ifndef __NO_STUBS |
| | 1349 | #define __ARCH_WANT_OLD_READDIR |
| | 1350 | Index: arch |
| | 1351 | =================================================================== |
| | 1352 | --- arch (revision 1367) |
| | 1353 | +++ arch (revision 1368) |
| | 1354 | |
| | 1355 | Property changes on: arch |
| | 1356 | ___________________________________________________________________ |
| | 1357 | Added: svn:mergeinfo |
| | 1358 | Merged /trunk/coursework/KernelHack/linux-2.6.35.14/i386/arch:r1353-1359 |
| | 1359 | }}} |
| | 1360 | |
| | 1361 | * viola06:x86_64 s0711489$ make -j 16 |
| | 1362 | {{{ |
| | 1363 | Kernel: arch/x86/boot/bzImage is ready (#2) |
| | 1364 | }}} |
| | 1365 | * viola06:x86_64 s0711489$ make modules |
| | 1366 | |
| | 1367 | |
| | 1368 | * s0711489@ubuntu-lucid64:~$ sudo /mnt/hgfs/tools/install.sh |
| | 1369 | |
| | 1370 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ uname -a |
| | 1371 | {{{ |
| | 1372 | Linux ubuntu-lucid64 2.6.32-33-generic #72-Ubuntu SMP Fri Jul 29 21:07:13 UTC 2011 x86_64 GNU/Linux |
| | 1373 | }}} |
| | 1374 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ gcc -I /lib/modules/2.6.35.14/build/arch/x86/include/ new_hello.c |
| | 1375 | {{{ |
| | 1376 | new_hello.c: In function ‘main’: |
| | 1377 | new_hello.c:9: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’ |
| | 1378 | }}} |
| | 1379 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ ./a.out |
| | 1380 | {{{ |
| | 1381 | new_hello(1) -> -1 |
| | 1382 | }}} |
| | 1383 | * reboot 前はsyscallが存在しない |
| | 1384 | |
| | 1385 | * s0711489@ubuntu-lucid64:~$ sudo reboot |
| | 1386 | |
| | 1387 | * s0711489@ubuntu-lucid64:~$ uname -a |
| | 1388 | {{{ |
| | 1389 | Linux ubuntu-lucid64 2.6.35.14 #2 SMP Wed Oct 26 13:06:41 JST 2011 x86_64 GNU/Linux |
| | 1390 | }}} |
| | 1391 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ ./a.out |
| | 1392 | {{{ |
| | 1393 | new_hello(1) -> 1 |
| | 1394 | }}} |
| | 1395 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ ./a.out 2 |
| | 1396 | {{{ |
| | 1397 | new_hello(2) -> 2 |
| | 1398 | }}} |
| | 1399 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ ./a.out 2 3 |
| | 1400 | {{{ |
| | 1401 | new_hello(3) -> 3 |
| | 1402 | }}} |
| | 1403 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ ./a.out 2 3 4 |
| | 1404 | {{{ |
| | 1405 | new_hello(4) -> 4 |
| | 1406 | }}} |
| | 1407 | * s0711489@ubuntu-lucid64:~/KernelHack/03$ tail /var/log/kern.log |
| | 1408 | {{{ |
| | 1409 | Oct 26 13:12:40 ubuntu-lucid64 kernel: [ 40.542158] new_hello() syscall with 1 |
| | 1410 | Oct 26 13:12:42 ubuntu-lucid64 kernel: [ 42.668465] new_hello() syscall with 2 |
| | 1411 | Oct 26 13:12:43 ubuntu-lucid64 kernel: [ 43.908292] new_hello() syscall with 3 |
| | 1412 | Oct 26 13:12:45 ubuntu-lucid64 kernel: [ 45.645548] new_hello() syscall with 4 |
| | 1413 | }}} |