Что такое ядро ​​Linux, эквивалентное функции memset? - PullRequest
6 голосов
/ 27 марта 2012

Я пишу драйвер, который требует от меня очистить всю память, выделенную для нуля.memset - это функция пользовательского пространства, но я хотел бы знать, предоставляет ли ядро ​​макрос, который помогает мне сделать это.

Ответы [ 3 ]

16 голосов
/ 29 марта 2013

Это правда 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%:)

7 голосов
/ 27 марта 2012

В соответствии с этой веткой и людьми, комментирующими здесь, которые ее использовали, memset является доступным в коде ядра.Может быть, вы просто забыли

#include <string.h>
1 голос
/ 07 февраля 2016

Я посмотрел его в имеющейся у меня книге по разработке драйверов для Linux (она на немецком языке, поэтому я приведу свободный перевод того, что он в основном говорит), и она дает следующее описание:

#include <asm/io.h>
void *memset(void *s, int c, size_t n);

Заполняет первые n байтов заданной области памяти в s постоянным байтовым значением c.Если вы хотите установить постоянные значения областей отображенной памяти ввода-вывода , вы должны использовать функцию memset_io().

Возвращает указатель на s.


Проведение еще одного расследования ... Если вы посмотрите на <asm/io.h> источники, вы можете найти:

#include <linux/string.h> /* for memset() and memcpy() */

... но также определение memset_io() функция, так что я думаю, что это должно быть правильно #include.

...