А те вещи, которые я описал - я вообще нигде не встречал
в том же understending linux kernel всё это описано, другое дело что нужно ещё выловить оттуда эту информацию из кучи ненужных деталей.
Модератор: Модераторы разделов
А те вещи, которые я описал - я вообще нигде не встречал
silentbob писал(а): ↑20.03.2006 05:32flook
Нет, интересно конечно было почитать. Продолжение интересует. К примеру мне довольно проблематично разобраться с такими вещами, как
Драйвер звуковой и видеокарточки, что делает, собственно ? Со звуком вообще ничего не понятно. С видео - примитивный framebuffer сделать это одно, а вот связку user space + драйвер + 3D ускоритель не могу понять. Да и почитать негде. Не нашел, по крайней мере.
А еще... Может знаете где взять приличную документацию по API 2.6 ядра ? если она существует, конечно
Код: Выделить всё
static struct list_head my_list = LIST_HEAD_INIT(&my_list);
Код: Выделить всё
struct my_struct {
... /* fields */
struct list_head list;
... /* fields */
};
Код: Выделить всё
stryct my_struct *obj;
...
list_add(&obj->list, &my_list);
...
list_del(&obj->list);
Код: Выделить всё
struct my_struct *obj;
struct list_head *lp;
...
obj = list_entry(lp, struct my_struct, list);
Код: Выделить всё
#define list_entry(lp, type, mem) \
(type *)(((char *)lp - &(((type *)0)->mem)))
Код: Выделить всё
1:
lock decl (%1); /* %1 points to lock in memory */
js 2f
.section LOCK_FAILED
2:
cmp 0, (%1)
jle 2b
jmp 1b
.endsection
Код: Выделить всё
/* read_lock - lock for reading */
lock decl (%1)
js 1f
... /* same as in lock */
/* write_lock - lock for writing */
lock subl 0x01000000, (%1)
js 1f
... /* same as in lock */
Код: Выделить всё
static inline void write_seqcount_begin(seqcount_t *lock)
{
lock->sequence++;
smp_wmb();
}
static inline void write_seqcount_end(seqcount_t *lock)
{
smp_wmb();
lock->sequence++;
}
...
seqcount_t lock = SEQCOUNT_ZERO;
...
write_seqcount_begin(&lock);
/* write what you want */
write_seqcount_end(&lock);
Код: Выделить всё
static inline int read_seqcount_begin(struct seqcount_t *lock)
{
int ret;
ret = lock->sequence;
smp_rmb();
return ret;
}
static inline int read_seqcount_retry(struct seqcount_t *lock, int s)
{
smp_rmb();
return (s & 1) | (lock->sequence ^ s);
}
...
int seq;
do {
seq = read_seqcount_begin(&lock);
/* read data */
} while (read_seqcount_retry(&lock, seq));
serzh-z писал(а): ↑01.03.2006 13:12Пожалуй, Sparky прав. Когда приходиться с этим столкнуться (например, при проблемах с vesafb довелось копать код в том место где выполняется запрос параметров из BIOS видюхи, ещё до распаковки остальной части ядра) - то возникают вопросы, и появляется необходимость в перерывании половины Сети.
Кстати, по пути и возник ещё вопрос - по ходу дела обратил внимание - на x86_64 загрузка выполняется аж в три этапа: реальный режим, защищённый 32-х разрядный, и только потом уже 64-х разрядный... Мне лично это было бы интересно почитать - чем вообще отличается процесс загрузки ядра от привычного 32-х разр.
А вообще - не было идеи писать подобные статьи, скажем на posix.ru - я думаю, что в форуме эти описания просто будут утеряны и незамечены?
Код: Выделить всё
alloc_etherdev(sizeof(struct my_privatre));
Люди, а у меня нет файла entry.S blink.gif
как мне заглянуть в system_call???