Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Кто там минусовал за Длинного за картинку с Боромиром и «нельзя просто так написать статью за 5 часов»? Стыдитесь.
dmesg -wman dmesg -w, --follow
Wait for new messages. This feature is supported on systems with
readable /dev/kmsg only (since kernel 3.5.0).
dmesg(1):
- reads kernel messages from /dev/kmsg on kernel 3.5
- supports new option --follow to wait for new messages (kernel 3.5 required)
- supports new option --reltime to print human readable deltas
static const struct lptlcd_fops = { .owner = THIS_MODULE, .read = dev_read, .write = dev_write, };
Кстати, встречал дисплеи с русскими буквами (естественно, только теми, которые нельзя заменить соответствующими латинскими). Естественно, необходимо писать тривиальный табличный маппер.
Там играет звук, но сейчас я динамик отпаял, потому что он меня достал
Объяснение такой махинации простое: udelay внутри ядра не может принимать значения больше тысячи
void expanderWrite(unsigned char _data){
//outb(((_data) | _backlightval), BASEPORT); //x86 instruction rootfs!!!!!
//outb_p(((_data) | _backlightval),BASEPORT); //x86 instruction kernel!!!!!
//вот здесь надо делать вывод в ваш порт
}
int delayMicroseconds(int value)
{
/usleep(value);
return 0;
}
Т. е. общие d0-3, rs, rw, vcc, gnd, contrast и раздельные e1 и e2.
static const struct file_operations lptlcd_fops = {
.owner = THIS_MODULE,
.read = dev_read,
.write = dev_write,
};
[X и [Y отличаются порядком аргументов?\038. Сам мало восьмиричной системой пользуюсь, так же ошибаюсь. Шестнадцатиричная как-то привычнее.Многие мои друзья и знакомые крутят пальцем у виска или задаются вопросом: не жмёт ли мне череп, когда узнают, что я пишу драйвера под Linux.
Создание собственных драйверов под Linux