LINUX.ORG.RU

Сообщения krautcat

 

Device Tree и out-of-tree модуль

Потихоньку разбираюсь с device tree и написанием протокольных драйверов для подсистемы SPI. Отладочная плата — Beaglebone Black. Версия ядра — 4.4.23-ti-r51. Система — официальная сборка Debian Jessie для Beaglebone Black.

Решил начать с малого: написать простейший echo-драйвер (для данного драйвера подразумевается, что на другом конце SPI — Arduino Pro Mini 3.3V).

Написал простейший модуль. В поле .compatible указал следующее:

{ .compatible = "arduino,pro-mini-spi-generic" },

Далее начал писать оверлей для своего устройства. По образу и подобию оверлея для вывода SPI в юзерспейс написал свой оверлей:

/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";

    /* identification */
    part-number = "BB-ARDUINO-ECHO";
    version = "00A0";

    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            spi0_pins_s0: spi0_pins_s0 {
                        pinctrl-single,pins = <
                                0x150 0x30      /* mcasp0_aclkx.spi0_sclk, INPUT_PULLUP  | MODE0 */
                                0x154 0x30      /* mcasp0_fsx.spi0_d0,     INPUT_PULLUP  | MODE0 */
                                0x158 0x10      /* mcasp0_axr0.spi0_d1,    OUTPUT_PULLUP | MODE0 */
                                0x15c 0x10      /* mcasp0_ahclkr.spi0_cs0, OUTPUT_PULLUP | MODE0 */
                >;
            };
        };
    };

    fragment@1 {
        target = <&spi0>;
        __overlay__ {

            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&spi0_pins_s0>;

            ardiuno_echo@0 {
                spi-max-frequency = <200000>;
                reg = <0>;
                compatible = "arduino,pro-mini-spi-generic";
            };
        };
    };
};

Затем решил протестировать оверлей. Оверлей динамически загружается. Затем решил пересобрать initrd, чтобы оверлей подхватывался при загрузке системы. Опции в uEnv.txt указал, оверлей загружается.

Ещё тестировал модуль ядра. Проверил insmod — грузится. Далее решил загружать его modprobe, для чего переместил модуль в /lib/modules/`uname -r`/extra. Затем depmod -a. Всё работает. Динамически тоже грузится, всё происходит хорошо, в dmesg выводит нужную информацию (в функцию probe добавил несколько printk). Далее я столкнулся с проблемой: как заставить out-of-tree модуль ядра автоматически подгружаться при загрузке системы, когда device tree обнаруживает в поле compatible необходимый драйвер? Если это невозможно, то мне бы хотелось узнать, почему. И если невозможно, то есть какой-нибудь гайд по внедрению out-of-tree модуля ядра в дерево исходных кодов?

 ,

krautcat
()

openSUSE или Ubuntu

Привет.

Я в течение продолжительного времени выбираю между двумя дистрибутивами, Ubuntu LTS (последняя версия) и openSUSE Leap. Ставить буду на десктоп, среди железа — Nvidia GTX670, Phenom II 1055T, а также Creative X-Fi Titanium HD.

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

Я занимаюсь разработкой под довольно широкий круг задач. Где-то учёба, где-то работа, а где-то хобби. Итак, что я делаю (или хотелось бы делать) на ПК, роль которого (основного инструмента) сейчас выполняет Thinkpad T420:

  • разработка на Perl и Python бэкэнда под веб;
  • разработка на Python по machine learning;
  • (теоретически) разработка под Tizen 3.0;
  • хочется уже поставить кросс-компилятор под ARMv7 для разработки под Linux;
  • разработка под другие дистрибутивы (обычно в VM);
  • низкоуровневая разработка на bare metal под ARM (Cortex A/M);
  • в планах наконец-то поставить CUDA Toolkit и заняться разработкой под неё.

До этого имел опыт продолжительного использования Arch Linux, Debian (Sid и Crunchbang) и openSUSE Tumbleweed. С течением времени понял, что на рабочей машине хочется иметь все пакеты под рукой, возможность ставить пакеты с проприетарным ПО или ПО, которые собирают под основные дистрибутивы (CUDA, пакеты под Tizen).

openSUSE устраивает пакетным менеджером, но ассортимент пакетов под кросс-компиляцию не особо устраивает. Официально не поставляют, есть только в пользовательских репах в OBS. Плюс ко всему прочему, в основном если под openSUSE собирают пакеты, то в основном под версию 13.2. Уже релизнулся Leap 42.2, а, к примеру, CUDA нет под 42.1. Аналогично с Tizen-специфичными вещами.

В Ubuntu же не особо устраивает пакетный менеджер (имею не особо положительный опыт с dpkg и apt), но зато в ней есть все нужные пакеты под мои задачи.

В дополнение ко всему прочему, хочется иметь свежие версии пакетов для десктопа (свежую версию KDE, аудио/видеоплеера, KeePassX, IDE и текстовых редакторов). В этом плане оба дистрибутива примерно равны, а на крайний случай есть PPA/OBS.

P.S. Думал, где топик делать, в толксах или в дескотпе, решил сделать тут. Если что, переместите.

 , ,

krautcat
()

кард-ридер + Arch + 3.17.2

В общем, обновил ночью ядро и несколько пакетов.

[2014-11-05 02:44] [PACMAN] upgraded linux (3.17.1-1 -> 3.17.2-1)
[2014-11-05 02:44] [PACMAN] upgraded linux-headers (3.17.1-1 -> 3.17.2-1)
[2014-11-05 02:44] [PACMAN] upgraded lsof (4.87-2 -> 4.88-1)
[2014-11-05 02:44] [PACMAN] upgraded make (4.0-2 -> 4.1-1)
[2014-11-05 02:44] [PACMAN] upgraded sbc (1.2-1 -> 1.3-1)
[2014-11-05 02:44] [PACMAN] upgraded tdb (1.3.0-2 -> 1.3.1-1)
[2014-11-05 02:44] [PACMAN] upgraded tevent (0.9.21-3 -> 0.9.22-1)
[2014-11-05 02:44] [PACMAN] upgraded smbclient (4.1.12-1 -> 4.1.13-1)
[2014-11-05 02:44] [PACMAN] upgraded sudo (1.8.11.p1-1 -> 1.8.11.p2-1)
До обновления все нормально работало, кардридер виделся и флешки читались. После обновления он перестал корректно отображаться и lspci выводил что-то на уровне:
Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
Алсо, теперь флешки как устройства определяются не как /dev/mmcblk#, а как обычное блочное устройство. Ядро сабжевое, Lenovo Yoga S1, кард-ридер Realtek RTS5227, как видно выше.

ЧЯДНТ? ЛОР, помоги дегроиду.

 , ,

krautcat
()

Grub 2, live usb

Решил создать liveUSB с alkid. Распаковал исошник в корень флешки, сделал установку груба на флешку:

grub-install --target=i386-pc --no-floppy --root-directory=/media/тут_UUID_флешки /dev/sdc
Устанавливается без ошибок. Затем ручками делаю grub.cfg с приблизительно таким содержанием менюшек:
menuentry 'win' {
ismod ntldr
ntldr /I386/SETUPLDR.BIN
}
В итоге груб появляется, но при загрузке установки alkid сразу перезагружается. Управление виндовому загрузчику передается.

 

krautcat
()

XFCE 4.10, иконки в трее

Привет. Система - Debian 7.6.0 Jessie с репами от sid.

Проблема такова: при установке стороннего иконпака иконки меняются в списке приложений для всех приложений, но в списке запущенных приложений и в плагине для меню окон не все обновляются. Так, для GIMP, Whisker Menu и некоторых других приложений они стоковые (в случае с Вискерменю - вообще левая иконка какая-то).

Рыл в сторону pixmaps, пытался играться и подменять изображения свгшками из темы, ни в какую.

Находил тут тред, но там решениия не предложили, вообще ничего толком не выяснили. На гугл+ numixproject узнал, что ето баг, его пока не пофиксили. Так ли это? Там предлагают пользоваться DockbarX, но он у меня не встает, вообще не запускается. В итоге почистил систему от него руками.

Сильно не бейте, осиливаю linux, debian и xfce в комплексе в свободное от учёбы время.

 , ,

krautcat
()

RSS подписка на новые темы