ゼロに割り当てられたすべてのメモリをクリアする必要があるドライバを作成しています。memset
はユーザースペース関数ですが、カーネルがこれを行うのに役立つマクロを提供しているかどうかを知りたいです。
16757 次
3 に答える
21
それは本当memset()
です
include <string.h >
memset()
カーネルコードに表示されることは想定されていません。実際、ドライバ開発中に含まれている場所を追跡するのに多くの費用がかかる可能性があります。実際memset()
にはで定義されています
#include<linux/string.h>
それは言う:
#ifndef __KERNEL__
#include <string.h>
#else
/* We don't want strings.h stuff being used by user stuff by accident */
これが「memset()」を100%確実に入力するのに役立つことを願っています:)
于 2013-03-29T17:37:49.810 に答える
7
このスレッドとそれを使用したここでコメントしている人々によると、カーネルコードで利用可能ですmemset
。たぶんあなたはただ忘れていた
#include <string.h>
于 2012-03-26T23:35:53.777 に答える
1
私が持っているLinuxドライバー開発の本(ドイツ語なので、基本的に何を言っているのかを大まかに翻訳します)で調べたところ、次のように説明されています。
#include <asm/io.h>
void *memset(void *s, int c, size_t n);
n
で指定されたメモリ領域の最初のバイトをs
定数バイト値で埋めますc
。メモリマップドI/Oメモリの領域を一定値に設定する場合は、このmemset_io()
関数を使用する必要があります。へのポインタを返します
s
。
さらに調査を行っています...<asm/io.h>
ソースを調べると、次のことがわかります。
#include <linux/string.h> /* for memset() and memcpy() */
...しかし、関数の定義もあるmemset_io()
ので、これは正しいはずだと思います#include
。
于 2016-02-06T23:44:35.787 に答える