Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346365
  • 博文数量: 168
  • 博客积分: 6895
  • 博客等级: 准将
  • 技术积分: 1726
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-12 23:01
文章分类

全部博文(168)

文章存档

2011年(6)

2010年(162)

我的朋友

分类: LINUX

2010-10-06 18:55:09

   If you are interested in kernel, you should operate on it. Syscall is a good way.Today let us learn how to do it together.
first, do this command under /usr/src/linux-2.6.33.7/arch/x86/kernel.( linux-2.6.33.7 is my kernel edition. you can choose yours. ) sudo vim syscall_table_32.s. Then you can add your syscall option like following.
329         .long sys_signalfd4
330         .long sys_eventfd2
331         .long sys_epoll_create1
332         .long sys_dup3                  /* 330 */
333         .long sys_pipe2
334         .long sys_inotify_init1
335         .long sys_preadv
336         .long sys_pwritev
337         .long sys_rt_tgsigqueueinfo     /* 335 */
338         .long sys_perf_event_open
339         .long sys_recvmmsg
340         .long sys_sayhello              /*338*/

Second, we should add syscall number to /usr/src/linux-2.6.33.7/arch/x86/include/asm/unistd_32.h like following.
1 #define __NR_eventfd            323
332 #define __NR_fallocate          324
333 #define __NR_timerfd_settime    325
334 #define __NR_timerfd_gettime    326
335 #define __NR_signalfd4          327
336 #define __NR_eventfd2           328
337 #define __NR_epoll_create1      329
338 #define __NR_dup3               330
339 #define __NR_pipe2              331
340 #define __NR_inotify_init1      332
341 #define __NR_preadv             333
342 #define __NR_pwritev            334
343 #define __NR_rt_tgsigqueueinfo  335
344 #define __NR_perf_event_open    336
345 #define __NR_recvmmsg           337
346 #define __NR_sayhello           338

Third, we should add our source code to kernel. We can add to any file if they are relative. We often add to /usr/src/linux-2.6.33.7/kernel/sys.c. Following is my code.
1659 /*my_syscall: print every process's infromation.
1660   Programmer name: Harry Wei
1661  */
1662 asmlinkage void sys_sayhello( void )
1663 {
1664         struct  task_struct     *task;
1665        
1666         task = &init_task;
1667
1668         printk( KERN_INFO"call syshello\n" );
1669
1670         for_each_process( task )
1671         {
1672                 printk( KERN_ALERT"%d\t%s\n", task->pid, task->comm );
1673         }
1674 }

Remember that you must include linux/sched.h.

Then, we should compile the kernel because system call is related to kernel.
We should care it is different from LKM.

At last, we should write our program to call the syscall. Mine is following.
//first sys_call function.
#include
#include
#include

#define        __NR_sayhello    338

int    main( void )
{
    syscall( __NR_sayhello );

    return( 0 );
}

If you run the program, you will see like
following by enter command dmesg in terminal.
[  136.010108] call syshello
[  136.010240] 1    init
[  136.010540] 2    kthreadd
[  136.010814] 3    migration/0
[  136.011072] 4    ksoftirqd/0
[  136.011327] 5    watchdog/0
[  136.011579] 6    events/0
[  136.011826] 7    cpuset
[  136.015303] 8    khelper
[  136.015610] 9    netns
[  136.015877] 10    async/mgr
[  136.018018] 11    pm
[  136.018019] 12    sync_supers
[  136.018019] 13    bdi-default
[  136.018823] 14    kintegrityd/0
[  136.019063] 15    kblockd/0
[  136.019294] 16    kacpid
[  136.019562] 17    kacpi_notify
[  136.019800] 18    kacpi_hotplug
[  136.020701] 19    ata/0
[  136.020937] 20    ata_aux
[  136.021152] 21    ksuspend_usbd
[  136.021376] 22    khubd
[  136.021588] 23    kseriod
[  136.021834] 24    kmmcd
[  136.024801] 26    khungtaskd
[  136.025083] 27    kswapd0
[  136.025308] 28    ksmd
[  136.025530] 29    aio/0
[  136.025754] 30    ecryptfs-kthrea
[  136.025997] 31    crypto/0
[  136.026235] 35    scsi_eh_0
[  136.026521] 36    scsi_eh_1
[  136.026757] 38    kstriped
[  136.026988] 39    kmpathd/0
[  136.027217] 40    kmpath_handlerd
[  136.027458] 41    ksnapd
[  136.027689] 42    kondemand/0
[  136.027929] 43    kconservative/0
[  136.028355] 45    jbd2/sda1-8
[  136.028624] 46    ext4-dio-unwrit
[  136.028864] 53    flush-8:0
[  136.029124] 79    upstart-udev-br
[  136.029374] 81    udevd
[  136.029638] 202    udevd
[  136.029960] 204    udevd
[  136.031088] 229    kpsmoused
[  136.031390] 343    jbd2/sda5-8
[  136.031662] 344    ext4-dio-unwrit
[  136.031915] 347    jbd2/sda7-8
[  136.032318] 348    ext4-dio-unwrit
[  136.032568] 364    rsyslogd
[  136.032827] 371    dbus-daemon
[  136.033082] 381    NetworkManager
[  136.033321] 383    avahi-daemon
[  136.033556] 385    avahi-daemon
[  136.033816] 388    modem-manager
[  136.034052] 420    wpa_supplicant
[  136.034289] 425    dhclient
[  136.034514] 487    recovery-menu
[  136.034777] 695    netroot
[  136.035036] 716    dhclient
[  136.035268] 717    bash
[  136.035493] 729    su
[  136.035715] 732    console-kit-dae
[  136.035956] 803    bash
[  136.036356] 851    a.out
[  223.206813] hrtimer: interrupt took 10389977 ns
[  436.199844] call syshello
[  436.201170] 1    init
[  436.201201] 2    kthreadd
[  436.201226] 3    migration/0
[  436.201253] 4    ksoftirqd/0
[  436.201278] 5    watchdog/0
[  436.201303] 6    events/0
[  436.201327] 7    cpuset
[  436.201352] 8    khelper
[  436.201377] 9    netns
[  436.201401] 10    async/mgr
[  436.201426] 11    pm
[  436.201451] 12    sync_supers
[  436.201477] 13    bdi-default
[  436.201502] 14    kintegrityd/0
[  436.201528] 15    kblockd/0
[  436.201553] 16    kacpid
[  436.201577] 17    kacpi_notify
[  436.201603] 18    kacpi_hotplug
[  436.201628] 19    ata/0
[  436.201653] 20    ata_aux
[  436.201678] 21    ksuspend_usbd
[  436.201703] 22    khubd
[  436.201727] 23    kseriod
[  436.201752] 24    kmmcd
[  436.201777] 26    khungtaskd
[  436.201802] 27    kswapd0
[  436.201827] 28    ksmd
[  436.201850] 29    aio/0
[  436.201873] 30    ecryptfs-kthrea
[  436.201898] 31    crypto/0
[  436.201921] 35    scsi_eh_0
[  436.201945] 36    scsi_eh_1
[  436.201969] 38    kstriped
[  436.201992] 39    kmpathd/0
[  436.202016] 40    kmpath_handlerd
[  436.202189] 41    ksnapd
[  436.202212] 42    kondemand/0
[  436.202236] 43    kconservative/0
[  436.202261] 45    jbd2/sda1-8
[  436.202285] 46    ext4-dio-unwrit
[  436.202309] 53    flush-8:0
[  436.202333] 79    upstart-udev-br
[  436.202357] 81    udevd
[  436.202381] 202    udevd
[  436.202404] 204    udevd
[  436.202428] 229    kpsmoused
[  436.202452] 343    jbd2/sda5-8
[  436.202477] 344    ext4-dio-unwrit
[  436.202503] 347    jbd2/sda7-8
[  436.202526] 348    ext4-dio-unwrit
[  436.202551] 364    rsyslogd
[  436.202574] 371    dbus-daemon
[  436.202599] 381    NetworkManager
[  436.202623] 383    avahi-daemon
[  436.202647] 385    avahi-daemon
[  436.202671] 388    modem-manager
[  436.202695] 420    wpa_supplicant
[  436.202719] 425    dhclient
[  436.202743] 487    recovery-menu
[  436.202767] 695    netroot
[  436.202791] 716    dhclient
[  436.202815] 717    bash
[  436.202838] 729    su
[  436.202861] 732    console-kit-dae
[  436.202885] 803    bash
[  436.202909] 867    startx
[  436.202932] 884    xinit
[  436.202957] 885    Xorg
[  436.202981] 889    ck-launch-sessi
[  436.203005] 908    ibus-daemon
[  436.203030] 920    ssh-agent
[  436.203060] 921    ibus-gconf
[  436.203086] 923    python
[  436.203110] 925    ibus-x11
[  436.203134] 935    dbus-launch
[  436.203202] 938    dbus-daemon
[  436.203227] 940    gconfd-2
[  436.203251] 941    x-session-manag
[  436.203275] 944    dbus-launch
[  436.203299] 945    dbus-daemon
[  436.203323] 946    ibus-engine-m17
[  436.203348] 949    gconfd-2
[  436.203372] 956    gnome-keyring-d
[  436.203396] 959    gnome-settings-
[  436.203421] 961    gvfsd
[  436.203444] 966    gvfs-fuse-daemo
[  436.203468] 970    polkit-gnome-au
[  436.203493] 971    bluetooth-apple
[  436.203517] 976    gnome-power-man
[  436.203542] 977    gnome-panel
[  436.203566] 978    metacity
[  436.203589] 980    nautilus
[  436.203613] 982    nm-applet
[  436.203637] 985    pulseaudio
[  436.203661] 987    rtkit-daemon
[  436.203685] 994    polkitd
[  436.203709] 1005    gconf-helper
[  436.203733] 1009    upowerd
[  436.203757] 1013    gvfsd-trash
[  436.203781] 1032    bonobo-activati
[  436.203805] 1053    wnck-applet
[  436.203830] 1054    trashapplet
[  436.203854] 1056    gvfs-gdu-volume
[  436.203878] 1061    gnome-screensav
[  436.203903] 1062    hald
[  436.203926] 1064    udisks-daemon
[  436.203950] 1065    hald-runner
[  436.203975] 1067    udisks-daemon
[  436.203995] 1084    gdu-notificatio
[  436.209907] 1095    gvfs-afc-volume
[  436.209939] 1098    gvfs-gphoto2-vo
[  436.209964] 1100    gvfsd-burn
[  436.210086] 1102    hald-addon-inpu
[  436.210114] 1117    hald-addon-stor
[  436.210139] 1123    hald-addon-stor
[  436.210163] 1125    hald-addon-acpi
[  436.210188] 1134    indicator-apple
[  436.210213] 1138    clock-applet
[  436.210237] 1139    indicator-apple
[  436.210262] 1141    notification-ar
[  436.210286] 1151    gvfsd-metadata
[  436.210310] 1153    indicator-me-se
[  436.210341] 1156    indicator-sound
[  436.210366] 1158    indicator-sessi
[  436.210390] 1162    indicator-messa
[  436.210414] 1164    indicator-appli
[  436.210439] 1166    gnome-terminal
[  436.210463] 1167    gnome-pty-helpe
[  436.210487] 1168    bash
[  436.210511] 1178    python
[  436.210534] 1181    evolution-alarm
[  436.210559] 1262    update-notifier
[  436.210583] 1266    system-service-
[  436.210607] 1271    aptd
[  436.210630] 1282    a.out

 
    
阅读(656) | 评论(0) | 转发(0) |
0

上一篇:Begin LKM

下一篇:10 5

给主人留下些什么吧!~~