[解決済み] 新しいシステムコールを書き込む
2022-02-19 09:41:46
質問
ラズベリーのカーネルに新しいシステムコール(sys_defclose)を書こうとしているのですが、コンパイル時にこのエラーが発生します。
arch/arm/kernel/built-in.o: In function `__sys_trace_return':
:(.text+0xd50): undefined reference to `sys_defclose'
以下のファイルを修正しました。
-include/linux/syscalls.h : 私のシステムコールのプロトタイプを置いたところです。
-arch/arm/include/asm/unistd.h : syscallテーブルの新しいrawを置く場所です。
#define __NR_sys_defclose (__NR_SYSCALL_BASE+380)
-arch/arm/kernel/calls.S : ここに入れます。
CALL(sys_defclose)
-sys_defcloseのソースをarch/arm/kernelに置き、同じディレクトリのmakefileに新しい行を追加して修正しました。
obj-y +=sys_defclose.o
カーネルのバージョンは3.6です。 どなたかこのエラーを解決する方法を教えてください。 ありがとうございます。 これは、私のシステムコールの実装です。
static struct task_struct* get_task_by_pid(pid_t pid)
{
return pid_task(find_pid_ns(pid, task_active_pid_ns(current)), PIDTYPE_PID);
}
static void close_files(struct files_struct * files)
{
int i, j;
struct fdtable *fdt;
j = 0;
rcu_read_lock();
fdt = files_fdtable(files);
rcu_read_unlock();
for (;;) {
unsigned long set;
i = j * BITS_PER_LONG;
if (i >= fdt->max_fds)
break;
set = fdt->open_fds[j++];
while (set) {
if (set & 1) {
struct file * file = xchg(&fdt->fd[i], NULL);
if (file) {
filp_close(file, files);
cond_resched();
}
}
i++;
set >>= 1;
}
}
}
asmlinkage long sys_defclose(pid_t pid)
{
struct task_struct *result = NULL;
rcu_read_lock();
result = get_task_by_pid(pid);
rcu_read_unlock();
close_files(result->files);
}
解決方法は?
を使用する必要があります。
SYSCALL_DEFINE*
を使用してシステムコールを定義し(このステップは間違っていると思います)、次にそのシステムコールを
sys_call_table
これはアーキテクチャに依存します(armの場合はarch/arm/kernel/calls.S)。
を変更します。
sys_defclose
をクリックすると、次のようになります。
SYSCALL_DEFINE1(defclose, pid_t, pid)
{
struct task_struct *result = NULL;
rcu_read_lock();
result = get_task_by_pid(pid);
rcu_read_unlock();
close_files(result->files);
}
関連
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない