static struct something x = {
.field_one = 123,
.field_two = 456
};
Это синтаксис инициализации struct
, стандартный для C99 ( см. Здесь ). В этом примере создается переменная типа struct something
с именем x
, с полями field_one
и field_two
, инициализированными указанными значениями, и любым другим полем, инициализированным как 0
. Ключевое слово static
- это спецификатор продолжительности хранения ( см. Здесь ).
static struct something x[] = {[0]={ ... }, [1]={ ... }};
Это сочетание синтаксиса инициализации struct
и инициализации массива, опять же стандартного с C99 ( см. здесь ). В этом примере создается массив x
переменных типа struct something
, массив с индексом 0
инициализируется содержимым инициализатора {...}
, и то же самое происходит с массивом с индексом 1
. Поскольку наибольший указанный индекс равен 1
, размер массива равен 2
.
Я не понимаю, почему они назвали тип u32
или какова цель __raw
.
Тип u32
- это просто короткий псевдоним для uint32_t
.
Я не уверен, где именно вы видели __raw
, поскольку я не нашел ничего подобного в исходных кодах ядра. В любом случае ядро Linux представляет собой серию аннотаций времени компиляции, используемых для переменных, которые имеют разное назначение (__user
, __rcu
, et c). Они не являются частью стандарта C и часто даже не являются расширениями G CC. В основном это подсказки для использования Sparse , Linux kernel semanti c checker.
Есть ли какой-либо стандарт или правило для наименования переменной, макроса, типа , ... в ядре?
Дополнительные сведения см. на странице документации Linux стиль кодирования ядра . Я бы посоветовал вам прочитать все это, прежде чем пытаться программировать какое-либо ядро. Чем больше страниц документации вы прочитаете, тем лучше.
А какие стандарты C должны соответствовать при написании кода в linux драйвере?
Использовать что-нибудь, что C99 или старше, и все будет в порядке. Код ядра Linux не соответствует единому стандарту C, а различные части кода даже не соответствуют стандарту, но используют расширения G CC. См. здесь для получения дополнительной информации.
Обычно вы не выбираете стандарт при компиляции, ядро Makefile
делает это за вас, и по умолчанию оно должно быть C90.
В любом случае это много вопросов. Если у вас есть вопрос specifici c, я бы посоветовал вам задать его отдельно, чтобы люди могли дать вам сфокусированный и более развернутый ответ, поскольку не рекомендуется c задавать слишком широкий или слишком много вопросов.