• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:linuxにシステムコールの追加)

Linuxに新しいシステムコールを追加する方法

_kappe_の回答

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1528/2225)
回答No.1

質問に書いてあるとおりのエラーメッセージが出ているのなら、syscall_32.tblに書き足すときのsys_mycallの綴り間違いが原因なのでは。元の記事がそうなっているが、lが一文字足りない。

91NName_
質問者

お礼

仰るとおりでした。 参考にしたサイトの通りにやっていたのですが、そちらが既に間違っていて気が付きませんでした。 回答ありがとうございました。 とても助かりました。

関連するQ&A

  • LKMを用いたカーネル2.6でのシステムコールのフック

    度々すみません。 LKMを使ったシステムコールのフックに挑戦しているのですがうまくいかずに悩んでいます。 お力を貸していただけたら嬉しいです。 ディストリビューション: Debian 4.0r4 カーネル: 2.6.24 以前2.6.18のカーネルを使っていたのですが、使用するカーネルのバージョンを上げました。 開発前にやったことをすべて書いておきます。 ・ linux-source-2.6.24_2.6.24-6~etchnhalf.7_all.deb ・ linux-headers-2.6.24-etchnhalf.1-686_2.6.24-6~etchnhalf.7_i386.deb ・ linux-kbuild-2.6.24-1~etchnhalf.1_i386.deb をダウンロードし、dpkg -i *.deb で展開。 /usr/src/linux-source-2.6.24/arch/x86/kernel/i386_ksyms_32.c の末尾に以下の2行を追加 extern void *sys_call_table[]; EXPORT_SYMBOL(sys_call_table); 変更後以下の手順でカーネルコンパイル cp /boot/config-2.6.18-6-686 .config make menuconfig (Enterを押しっぱなしにして設定終了) make-kpkg --initrd kernel_image dpkg -i (kernel_image).deb 書いたプログラムは以下です。 #include <linux/module.h> #include <linux/init.h> #include <linux/syscalls.h> #include <linux/utsname.h> #include <asm-x86/unistd_32.h> MODULE_LICENSE("GPL"); extern void *sys_call_table[]; static char *msg = "[message.o]:"; asmlinkage int (*orig_open)(const char *pathname, int flags); asmlinkage static int hook_open(const char *pathname, int flags) { printk(KERN_INFO "hook_open(\"%s\", %d)\n", pathname, flags); return orig_open(pathname, flags); } static int message_module(void) { printk(KERN_INFO "%s loaded\n",msg); printk(KERN_INFO "%s hook_init\n", msg); orig_open = sys_call_table[__NR_open]; sys_call_table[__NR_open] = hook_open; return 0; } static void message_remove(void) { printk(KERN_INFO "%s removed\n", msg); printk(KERN_INFO "%s hook_exit\n", msg); sys_call_table[__NR_open] = orig_open; } module_init(message_module); module_exit(message_remove); コンパイルすると以下のようなエラーが出ます。 user@debian:~/lkm/message$ make make -C /lib/modules/2.6.24/build M=/home/user/lkm/message modules make[1]: ディレクトリ `/usr/src/linux-source-2.6.24' に入ります Building modules, stage 2. MODPOST 1 modules WARNING: "sys_call_table" [/home/user/lkm/message/message.ko] undefined! make[1]: ディレクトリ `/usr/src/linux-source-2.6.24' から出ます 長文で申し訳ありませんが、お力をお貸しください。 宜しくお願いします。

  • Linuxカーネルで使用されているシステムコール一覧が知りたいです。

    Linuxカーネルで使用されているシステムコールの処理内容が書かれている書籍はないでしょうか?いろいろ調べたのですが発見できていません。昔PC98シリーズであったBIOSリファレンスマニュアル的なものが無いか期待しているのですが... LinuxカーネルはVer 2.6.15.2を見てますが特にこだわっていません。 よろしく、お願いします。

  • Debianカーネル再構築の際のコンパイルエラーの対処方法について

    現在、Debianカーネル2.6.16(Sarge)を用いています。 新しく2.6.20にカーネルの再構築を行おうとしております。 カーネルのコンパイルを行うと、下記のようなエラーが発生して、進まなくなってしまいました。 エラーの対応方法についてご教授頂ければと思います。 よろしくお願いします。 ===== /usr/src/linux-2.6.20# make vmlinux CHK include/linux/version.h CHK include/linux/utsrelease.h CHK include/linux/compile.h GEN .version CHK include/linux/compile.h UPD include/linux/compile.h CC init/version.o LD init/built-in.o LD .tmp_vmlinux1 local symbol 0: discarded in section `.exit.data' from drivers/built-in.o local symbol 1: discarded in section `.exit.data' from drivers/built-in.o local symbol 2: discarded in section `.exit.data' from drivers/built-in.o local symbol 3: discarded in section `.exit.data' from drivers/built-in.o make: *** [.tmp_vmlinux1] Error 1

  • Windowsコモンコントロールのcygwin/gccコンパイルエラー

    以下のサイトのようなWindowsコモンコントロールのプログラムをcygwin/gccコンパイルするとエラーがでます。 (sourceのサイト) http://wisdom.sakura.ne.jp/system/winapi/common/common16.html (ビルドコマンド) gcc -mwindows -mno-cygwin -o main.exe main.cpp (エラー出力) undefined reference to `_ImageList_Destroy@4' undefined reference to `_InitCommonControls@0' undefined reference to `_ImageList_Create@20' undefined reference to `_ImageList_ReplaceIcon@12' undefined reference to `_ImageList_ReplaceIcon@12' collect2: ld returned 1 exit status make: *** [main.exe] Error 1 Windowsコモンコントロールを含んだプログラムをcygwin/gccコンパイルするにはどうすればよいでしょうか? コンパイルは出来ないのでしょうか? よろしくお願いします。

  • Linuxのmake時のエラーについて

    あるプログラムをmakeすると下記のメッセージが出たのですが、どうすれば正常にmakeできますでしょうか?他のPCだとできたようです。 よろしくお願い致します。 g++ -L. -lpthread -lrt -lm -o SchedFifoTest SFthread.o SchedFifoTest.o /usr/bin/ld: SchedFifoTest.o: in function `main': SchedFifoTest.cc:(.text.startup+0x5e): undefined reference to `pthread_setaffinity_np' /usr/bin/ld: SFthread.o: in function `ARCS::SFthread::SFthread(unsigned long, void (*)(void*), void*, int)': SFthread.cc:(.text+0x2e9): undefined reference to `pthread_create' /usr/bin/ld: SFthread.cc:(.text+0x336): undefined reference to `pthread_setaffinity_np' /usr/bin/ld: SFthread.o: in function `ARCS::SFthread::~SFthread()': SFthread.cc:(.text+0x36d): undefined reference to `pthread_cancel' collect2: error: ld returned 1 exit status make: *** [Makefile:51: SchedFifoTest] エラー 1

  • VMwareの設定が上手くいかない

    VMware4.5.2をRedHatLinux Enterprise3にインストールしました。 「vmware-config.pl」を実行したところ、以下のようなエラーが出てきて、先に進めません。リンク先のページを見てもどう対処すればいいかさっぱり分かりませんでした。どなたか対処法および関係ありそうなwebを教えてください。 make[2]: *** [driver.o] Error 1 make[2]: Leaving directory `/tmp/vmware-config0/vmmon-only/driver-2.4.21-15.0.3.ELsmp' make[1]: *** [driver] Error 2 make[1]: Leaving directory `/tmp/vmware-config0/vmmon-only' make: *** [auto-build] Error 2 make: Leaving directory `/tmp/vmware-config0/vmmon-only' Unable to build the vmmon module. For more information on how to troubleshoot module-related problems, please visit our Web site at "http://www.vmware.com/download/modules/modules.html" and "http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html". Execution aborted. 当方の環境は Dell Precision 650-n Intel Xeon 3.2GHz*2 RedHat Linux 3 (kernel-2.4.21-15.0.3-ELsmp) です。

  • ubuntu上でVMware serverのインストール

    ubuntu8.10 カーネル Linux 2.6.27-11-generic この環境でVMware server 1.0.8をインストールしようと苦戦しております。 VMware-server-1.0.8-126538.tar.gzをダウンロードして、解凍し vmware-server-distribフォルダに移動し、vmware-install.plを実行しました。 その後ほとんどの設定にデフォルトで答え、使用許諾を受け入れると None of the pre-built vmmon modules for VMware Server is suitable for your running kernel. Do you want this program to try to build the vmmon module for your system (you need to have a C compiler installed on your system)? [yes] といわれ、コンパイルをはじめます。 その後もデフォルトで答えていき、いざコンパイルがはじまると、、、 Extracting the sources of the vmmon module. Building the vmmon module. Using 2.6.x kernel build system. make: ディレクトリ `/tmp/vmware-config7/vmmon-only' に入ります make -C /lib/modules/2.6.27-11-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules make[1]: ディレクトリ `/usr/src/linux-headers-2.6.27-11-generic' に入ります CC [M] /tmp/vmware-config7/vmmon-only/linux/driver.o In file included from /tmp/vmware-config7/vmmon-only/./include/machine.h:24, from /tmp/vmware-config7/vmmon-only/linux/driver.h:15, from /tmp/vmware-config7/vmmon-only/linux/driver.c:49: /tmp/vmware-config7/vmmon-only/./include/x86.h:830:1: warning: "PTE_PFN_MASK" redefined In file included from include/asm/paravirt.h:7, from include/asm/irqflags.h:55, from include/linux/irqflags.h:57, from include/asm/system.h:11, from include/asm/processor.h:17, from include/linux/prefetch.h:14, from include/linux/list.h:6, from include/linux/module.h:9, from /tmp/vmware-config7/vmmon-only/linux/driver.c:12: include/asm/page.h:22:1: warning: this is the location of the previous definition In file included from /tmp/vmware-config7/vmmon-only/linux/vmhost.h:13, from /tmp/vmware-config7/vmmon-only/linux/driver.c:71: /tmp/vmware-config7/vmmon-only/./include/compat_semaphore.h:5:27: error: asm/semaphore.h: No such file or directory /tmp/vmware-config7/vmmon-only/linux/driver.c:146: error: unknown field ‘nopage’ specified in initializer /tmp/vmware-config7/vmmon-only/linux/driver.c:147: 警告: initialization from incompatible pointer type /tmp/vmware-config7/vmmon-only/linux/driver.c:150: error: unknown field ‘nopage’ specified in initializer /tmp/vmware-config7/vmmon-only/linux/driver.c:151: 警告: initialization from incompatible pointer type /tmp/vmware-config7/vmmon-only/linux/driver.c: In function ‘LinuxDriver_Ioctl’: /tmp/vmware-config7/vmmon-only/linux/driver.c:1670: error: too many arguments to function ‘smp_call_function’ make[2]: *** [/tmp/vmware-config7/vmmon-only/linux/driver.o] エラー 1 make[1]: *** [_module_/tmp/vmware-config7/vmmon-only] エラー 2 make[1]: ディレクトリ `/usr/src/linux-headers-2.6.27-11-generic' から出ます make: *** [vmmon.ko] エラー 2 make: ディレクトリ `/tmp/vmware-config7/vmmon-only' から出ます Unable to build the vmmon module. For more information on how to troubleshoot module-related problems, please visit our Web site at "http://www.vmware.com/download/modules/modules.html" and "http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html". Execution aborted. といわれ、コンパイルがうまくいきません。 どのようにしたらこの先に進むことができるでしょうか? ご教授お願い致します。

  • Linuxカーネル sampleプログラムについて

    現在、linuxのsysfsについて勉強中です。 kernel/samples/kobjectの下にある、 kobject-example.c をカーネルにbuilt-inさせ、 ビルドを行い、uImageを作成しました。 具体的な手順は以下のとおりです。 make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- menuconfig Kernel hacking ---> [*] Sample kernel code ---> <M> Build kobject examples -- loadable modules only make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage サンプルソースの説明に * This module shows how to create a simple subdirectory in sysfs called * /sys/kernel/kobject-example In that directory, 3 files are created: * "foo", "baz", and "bar". If an integer is written to these files, it とあったので、 カーネルを起動させ、/sys/kernelの下をみにいったのですが、 存在していませんでした。 そこで、kobject-example.cをkernel/drivers/miscの下に移動させ、 カーネルモジュール(kobject-example.ko)を作成し、insmodしたところ、 下記のようにちゃんとフォルダkobject_exampleが生成されていました。 /sys/kernel # /sys/kernel # ls -l kobject_example/ total 0 -rw-rw-rw- 1 0 0 4096 Jan 1 00:00 bar -rw-rw-rw- 1 0 0 4096 Jan 1 00:02 baz -rw-rw-rw- 1 0 0 4096 Jan 1 00:00 foo ここで質問です。 kernel/samplesの下におかれているサンプルソースは、 このフォルダ直下においていては動作テストをすることができないのでしょうか? 上記のように、わざわざkernel/drivers/miscの下などに移動させて、モジュールの 作成を行わないといけないのでしょうか? ご教示のほどよろしくお願いします。

  • カーネル再構築でのエラー

    TurboLinux10Desktopでカーネルの再構築を実行してみました。 結論から言うと、 kernel (hd0,0)/vmlinuz_usb root=0303 Error 13 :Invalid or unsupported executable format というエラーが出て起動できませんでした。 このエラーが出そうな要因を教えてください。 インストール時のgrub.confには、 title turbolinux kernel (hd0,0)/vmlinuz root=0303 initrd (hd0,0)/initrd と書かれており、 これに従って、 title turbolinux_usb kernel (hd0,0)/vmlinuz_usb root=0303 initrd (hd0,0)/initrd_usb と記述しました。 vmlinuz_usb、initrd_usbは、 日付から見て今回の再構築の過程でできたであろうファイルへのシンボリックリンクです。 grub.confに書かれたもともとのvmlinuz、initrdのリンク先を見て作りました。 再構築時のパラメータの設定はmake xconfigで行い、USB関連の1項目にチェックを入れただけです。 その後のmakeのコマンドは、 http://www.atmarkit.co.jp/flinux/rensai/linuxtips/217tlkernel.html を参考にしました。 今回のエラーは、単純に「今回のxconfigによるパラメータではOSは起動できない」という意味なのでしょうか? make dep ~ make installの間、特にエラーは出ませんでしたが。 make xconfigを開いた時に既に多くのパラメータが設定済みに見えたので、 参考サイトにあるようにxconfigの前に./SetupKernelSource.sh i386を実行しなかったのですが、 これがまずかったのでしょうか? 今回の再構築の手順は以下の通りです。 cd /usr/src/linux make xconfig →設定後保存し、.configができた make dep make clean make bzImage make modules make modules_install make install →/usr/src/linuxにvmlinuxができた cp vmlinux /boot /bootを見ると、 initrd-2.6.0.img、System.mapが今日の日付になっていた ln -fs vmlinux vmlinuz_usb ln -fs initrd-2.6.0.img initrd_usb 前述したようにgrub.confを書き換えて再起動→Error13 この再構築手順で間違った部分があればそれも教えてください。

  • MySQL接続を行うソースのコンパイルが出来ず苦しんでます

    皆さん、こんにちは。 C++でソースを書いています。 内容としてはMySQLに接続し、 DBから得たデータを表示するソースなので、 以下のように、 「mysql.h」をヘッダでインクルードしているわけなのですが、 --------------------- #include <mysql.h> --------------------- 作ったソースをmakeしようとすると、 次のように、 DB接続に必要と思いソース内で使用した、 以下の変数について、undefined referenceで怒られてしまいます。 ------------------------------------------------ /home/test/dbtest.cpp:178: undefined reference to `mysql_init' /home/test/dbtest.cpp:181: undefined reference to `mysql_real_connect' /home/test/dbtest.cpp:182: undefined reference to `mysql_error' /home/test/dbtest.cpp:188: undefined reference to `mysql_query' /home/test/dbtest.cpp:189: undefined reference to `mysql_error' /home/test/dbtest.cpp:193: undefined reference to `mysql_use_result' /home/test/dbtest.cpp:197: undefined reference to `mysql_free_result' /home/test/dbtest.cpp:198: undefined reference to `mysql_close' ------------------------------------------------ そこで、下記URLの内容にあるエラー内容と 完全に同じでしたので、 「libmysqlclient.so」へのパスを通そうと思いました。 http://dev.mysql.com/doc/refman/4.1/ja/link-errors.html ということで、 findで「libmysqlclient.so」のパスを調べ、 makeの際に、-Iでディレクトリを指定しなおしましたが、 やはり、同じエラーが表示されます。 ------------------------------------------------ # find / -name "libmysqlclient.so" -print /usr/lib/mysql/libmysqlclient.so # make -I /usr/lib/mysql/libmysqlclient.so ------------------------------------------------ どうしていいか分からず困ってしまいました。 初心者で初歩的な部分かもしれませんが、 何かアドバイスいただけると とてもありがたいです。 どうぞ宜しくお願い致します。 OSはFedora9です。 viでソースを編集しながら、 makeをしたりしています。