LINUX.ORG.RU

Сообщения Jullyfish

 

Не монтируется rootfs с некоторых sd-карт

 ,

Вводные данные

Есть образ для sd:

$ gdisk -l sdcard.img
GPT fdisk (gdisk) version 1.0.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk sdcard.img: 1105960 sectors, 540.0 MiB
Sector size (logical): 512 bytes
Disk identifier (GUID): B00D8182-4B3E-46AB-A778-EA132328E92D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1105926
Partitions will be aligned on 2048-sector boundaries
Total free space is 16357 sectors (8.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1           16384           24575   4.0 MiB     8300  uboot
   2           24576           32767   4.0 MiB     8300  misc
   3           32768          163839   64.0 MiB    8300  boot
   4          163840          425983   128.0 MiB   8300  recovery
   5          425984          491519   32.0 MiB    8300  backup
   6          491520         1105919   300.0 MiB   8300  rootfs

Заливаю следующим образом:

$ dd if=sdcard.img of=/dev/sdc bs=1M status=progress && sync

С некоторыми sd всё замечательно. После dd сразу можно сделать:

# mount /dev/sdc6 mnt/

И всё работает. А с другими какая-то фигня. sd-карты разных размеров: 8, 16, 32 гб.

Какая-то фигня

Другие sd-карты. Делаю всё также dd (можно предварительно if=/dev/zero для надёжности).

Если воткнуть в устройство

Устройство запускается uboot и kernel запускаются. Но потом случается kernel panic:

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,6)

Если попробовать примонтировать

[173705.740640] EXT4-fs (sdc6): VFS: Can't find ext4 filesystem
[173705.741159] EXT4-fs (sdc6): VFS: Can't find ext4 filesystem
[173705.741470] EXT4-fs (sdc6): VFS: Can't find ext4 filesystem
[173705.759537] ISOFS: Unable to identify CD-ROM format.
[173705.759835] FAT-fs (sdc6): bogus number of reserved sectors
[173705.759837] FAT-fs (sdc6): Can't find a valid FAT filesystem
[173705.760256] hfs: can't find a HFS filesystem on dev sdc6
[173705.760632] hfsplus: unable to find HFS+ superblock
[173705.761486] exFAT-fs (sdc6): invalid boot record signature
[173705.761488] exFAT-fs (sdc6): failed to read boot sector
[173705.761489] exFAT-fs (sdc6): failed to recognize exfat type

А что говорит gdisk?

Caution: invalid backup GPT header, but valid main header; regenerating
backup header from main header.

Warning! Main and backup partition tables differ! Use the 'c' and 'e' options
on the recovery & transformation menu to examine the two tables.

Warning! One or more CRCs don't match. You should repair the disk!
Main header: OK
Backup header: ERROR
Main partition table: OK
Backup partition table: ERROR

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************

Command (? for help): v

Caution: The CRC for the backup partition table is invalid. This table may
be corrupt. This program will automatically create a new backup partition
table when you save your partitions.

Identified 1 problems!

Откуда эти проблемы берутся? Как их лечить?

Jullyfish
()

Есть ли программы для рукописного ввода и редактированием обычных текстовых файлов?

 

Именно под Linux или *BSD. Чтобы рукописно кодить можно было. :^)

Jullyfish
()

MSP430. Вопрос к тем кто работал с PDP-11. Программирование машинными кодами. Поделитесь опытом.

 , ,

В руки попал микроконтроллер MSP430 с платой LaunchPad. Искал какие есть инструменты для программирования и прошивки. В составе MSPFlasher попался файл Firmware.txt следующего содержания:

@e000
21 83 B2 40 80 5A 20 01 F2 D3 22 00 F2 E3 21 00 
B1 40 10 27 00 00 91 83 00 00 81 93 00 00 FB 23 
F5 3F 31 40 00 04 B2 40 48 E0 00 02 B2 40 48 E0 
02 02 B0 12 40 E0 0C 43 B0 12 00 E0 B0 12 44 E0 
1C 43 30 41 03 43 FF 3F 30 41 
@fffe
22 E0 
q

С помощью другой программы mspdebug у меня получилось зашить этот Firmware.txt:

$ ./mspdebug rf2500
(mspdebug) erase
Erasing...
(mspdebug) load ../MSPFlasher_1.3.20/Firmware.txt 
Done, 76 bytes total
(mspdebug) exit

После этого светодиодики бодро заморгали на плате.

Мне захотелось тоже попробовать хоть что-нибудь написать таким образом, просто чтобы был такой опыт. Если верить википедии, у MSP430 схожая система команд с PDP-11. Я относительно молодой, PDP-11 совсем не застал.

Здесь на форуме от разных людей видел комментарии в духе «дайте мне в руки PDP-11 и я вспомню как это делается». В руки, увы, ни PDP-11, ни MSP430 не дам. Но если поделитесь опытом, буду очень рад!

Вот, что, к примеру, делает программа описанная в файле Firmware.txt? Я, например, пока не могу расшифровать. :^)

Jullyfish
()

В postmarketOS systemd или openrc?

 , ,

Хочу на PineTab2 поставить, но в интернетах не сходится информация о том, какая там система инициализации.

Кто-нибудь ставил? Какая там система инициализации по итогу?

Jullyfish
()

Отключить line buffering у /dev/ttyFIQ

 ,

Проблема Y

Решил попробовать через UART пройти плату с rockchip отладчиком ядра. Вроде всё по инструкции сделал, но упёрся в непонятную ситуацию:

(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0
Remote replied unexpectedly to 'vMustReplyEmpty': vMustReplyEmpty

Есть подозрения, что у /dev/ttyFIQ0 включена построчная буферизация, т.к. когда я делаю на устройстве:

# cat /dev/ttyFIQ0

И делаю:

(gdb) target remote /dev/ttyUSB0

По UART явно данные передаются (лампочка мигает), но при этом ничего не выводится. Но если потом сделать:

echo > /dev/ttyUSB0

На устройстве будет что-то вроде:

# cat /dev/ttyFIQ0 
+$qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;QThreadOptions+;no-resumed+;memory-tagging+;xmlRegisters=i386;error-message+#14---+$vCont?#49---+ <дальше опущено>

Проблема X

Следовательно, вопрос: как у /dev/ttyFIQ0 отключить буфферизацию ввода?

# stty -F /dev/ttyFIQ0 
speed 115200 baud; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-brkint ixoff -imaxbel

P.s. baudrate правильный, в /etc/inittab консоль отключена.

Jullyfish
()

Какие есть способы, чтобы устройство сообщало «я здесь»?

 , ,

Играюсь с разными одноплатниками, обычно их ищу в сети с помощью nmap. Не всегда есть такая возможность, например, когда пришёл в гости, чужой компьютер без nmap или ещё хуже – оффтопик.

Заметил, что vlc, например, умеет «видеть» в локальной сети smb шары. А также есть протокол SAP (опять же vlc его умеет). На бумаге выглядит красиво для случаев если одноплатник с камерой, а по факту как-то очень криво работает.

Как ещё устройства могут сообщать о себе? Интересуют наиболее минималистичные варианты.

P.s. устройства должны сообщать о себе в локальной сети.

Jullyfish
()

Есть ли монохромный $TERM который поддерживает dim?

 

Jullyfish
()

Си. Нормально ли не освобождать ресурсы, которые освобождает ОС после завершения программы?

 ,

Пример:

int main()
{
  int fd;
  char *filename;

  filename = malloc_filename();
  fd = open(filename, O_RDWR);
  if (!fd) {
    perror(filename);
    /* free(filename); */
    return 1;
  }
  
  doing_something(fd);

  /* free(filename); */
  /* close(fd); */
  return 0;
}

Что плохого, если я не сделаю free() и close()? Какие подводные камни? Я раньше думал, что valgrind ругается, если сам не сделал free(), но нет (не исключено, что я неправильно воспользовался valgrind).

Jullyfish
()

gcc. Что такое trigraph?

 

В моём коде есть участок:

#if 0 /* TODO */
  if (qec->flags ???)
#endif

Если это скомилировать:

gcc -Wall main.c

Выдаёт:

main.c: In function ‘set_set’:
main.c:405:25: warning: trigraph ??) ignored, use -trigraphs to enable [-Wtrigraphs]
  405 |         if (qec->flags ???)

У trigraph в gcc есть какое-то специальное значение? Почему оно на это дело ругается?

Jullyfish
()

sed. Паттерн для конструкции name=value, отрицательный value.

 

Есть строки формата name=value, надо их находить с помощью паттерна. Я с ходу написал так:

[a-z_]\+=[0-9]\+

Проблема, оно не учитывает, что value может быть отрицательным.

Как сделать, чтобы учитывалось, что перед [0-9] может быть, а может не быть -?

Jullyfish
()

Передача битового поля как аргумент функции

 , ,

Предположим, есть структура с битовым полем:

struct example {
    unsigned bit_field:1;
    /* тут много других полей структуры */
};

Далее хочется описать функцию, которая:

  1. Возвращает код успеха;
  2. Первым аргументом принимает адрес битового поля как параметр-переменную;
  3. Вторым аргументом принимает какую-нибудь большую структуру, исходя из её значений меняется значение битового поля.

Пример обращения к этой функции:

struct example ex;
int rc;
rc = func(&ex.bit_field, &big_struct);

Как должно выглядеть объявление функции func?

Jullyfish
()

Почему stl основной формат для подготовки gcode для 3D-принтера?

 , ,

stl (stereolithography) содержит в себе информацию о вершинах треугольников из которых получается полигональная сетка. Изобразить идеальный круг с помощью stl невозможно.

gcode – векторный формат, следовательно и круг можно идеально изобразить.

Jullyfish
()

NetBSD, /dev/tun0 permission

 , , ,

Простая программка для проверки открытия туннеля:

/* open_tun0 */
#include <fcntl.h>
#include <stdio.h>

int main()
{
        int fd;
        fd = open("/dev/tun0", O_RDWR);
        printf("%d\n", fd);
        if (fd == -1)
                perror("/dev/tun0");
        return 0;
}

Создаю tun0-интерфейс:

# ifconfig tun0 create
# open_tun0
3
# chown dummy /dev/tun0
# su dummy
$ open_tun0
-1
/dev/tun0: Operation not permitted

Тоже самое делаю в OpenBSD (только там чуть по-другому интерфейс создаётся):

# ifconfig tun0 group tun
# open_tun0
3
# chown dummy /dev/tun0
# su dummy
$ open_tun0
3

Почему в NetBSD не хочет открываться, хотя права выданы?

Jullyfish
()

Определить какой процесс читает содержимое файла

 ,

Есть одноплатник, на нём запускается программа, которая каким-то образом считывает содержимое файла и передаёт информацию драйверу. Если файла нет, выводится сообщение об ошибке, с указанием того, что файл не найден.

Если посмотреть запуск программы через strace, никакого открытия файла не происходит. Если файла нет, сообщение об ошибке, тоже в логах strace нет.

При этом, судя по всему, файл открывается, считывается и закрывается. Поэтому lsof тут не помогает.

Какие есть ещё варианты?

Перемещено hobbit из general

Jullyfish
()

Базовый минимум html, css без js для пк/смартфона/TUI

 , ,

linux.org.ru, к примеру, хорошо выглядит как и в консольном браузере, как и на ПК, так и на смартфоне даже с отключенным js.

Есть какой-то небольшой набор базовых правил, чтобы всё было так аккуратно? Хочу себе на сайте также.

Jullyfish
()

tuxguitar не запускается. java.lang.UnsupportedClassVersionError

 ,

При запуске выдаёт:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/swt/widgets/Display has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

Пробовал меня версию таким образом (как я понял, нужна версия 11, которая и установилась вместе с пакетом tuxguitar):

# update-alternatives --config java

There is 5 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*  1           java-21-openjdk.x86_64 (/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-2.fc40.x86_64/bin/java)
   2           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.12.0.7-2.fc40.x86_64/bin/java)
   3           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-3.fc40.x86_64/jre/bin/java)
   4           /usr/lib/jvm/jre-1.7.0-oracle.x86_64/bin/java
 + 5           /usr/lib/jvm/java-11-openjdk/bin/java
$ java -version
openjdk version "11.0.27" 2025-04-15
OpenJDK Runtime Environment (Red_Hat-11.0.27.0.6-1) (build 11.0.27+6)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.27.0.6-1) (build 11.0.27+6, mixed mode)

Ошибка всё та же. Как это вылечить?

Jullyfish
()

Вёрстка комментариев поехала

 , ,

Часто браузер открыт в полэкрана, такое увидел впервые:

Скриншот

Jullyfish
()

Buildroot. Заставить работать нормально X11. Raspberry pi 3.

 , , ,

Пытаюсь на досуге заставить работать иксы собранные в buildroot. В каком-то виде их даже получается запустить. Но не работает клавиатура, а мышь, если получается заставить работать, то работает ужасно. А ещё хочу работающий тачскрин…

Вот всё в конфиге связанное с иксами:

BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR=y
BR2_PACKAGE_XSERVER_XORG_SERVER_XVFB=y
BR2_PACKAGE_LIBXCB=y
BR2_PACKAGE_XLIB_LIBICE=y
BR2_PACKAGE_XLIB_LIBSM=y
BR2_PACKAGE_XLIB_LIBX11=y
BR2_PACKAGE_XLIB_LIBXAU=y
BR2_PACKAGE_XLIB_LIBXAW=y
BR2_PACKAGE_XLIB_LIBXCURSOR=y
BR2_PACKAGE_XLIB_LIBXDAMAGE=y
BR2_PACKAGE_XLIB_LIBXDMCP=y
BR2_PACKAGE_XLIB_LIBXEXT=y
BR2_PACKAGE_XLIB_LIBXFIXES=y
BR2_PACKAGE_XLIB_LIBXFONT2=y
BR2_PACKAGE_XLIB_LIBXFT=y
BR2_PACKAGE_XLIB_LIBXI=y
BR2_PACKAGE_XLIB_LIBXINERAMA=y
BR2_PACKAGE_XLIB_LIBXMU=y
BR2_PACKAGE_XLIB_LIBXPM=y
BR2_PACKAGE_XLIB_LIBXRANDR=y
BR2_PACKAGE_XLIB_LIBXRENDER=y
BR2_PACKAGE_XLIB_LIBXRES=y
BR2_PACKAGE_XLIB_LIBXT=y
BR2_PACKAGE_XLIB_LIBXXF86VM=y
BR2_PACKAGE_XLIB_LIBFONTENC=y
BR2_PACKAGE_XLIB_LIBXCVT=y
BR2_PACKAGE_XLIB_LIBXKBFILE=y
BR2_PACKAGE_XLIB_LIBXSHMFENCE=y
BR2_PACKAGE_XLIB_XTRANS=y
BR2_PACKAGE_XAPP_SESSREG=y
BR2_PACKAGE_XAPP_TWM=y
BR2_PACKAGE_XAPP_XAUTH=y
BR2_PACKAGE_XAPP_XCLOCK=y
BR2_PACKAGE_XAPP_XDM=y
BR2_PACKAGE_XAPP_XEYES=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XAPP_XKBCOMP=y
BR2_PACKAGE_XAPP_XRDB=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_EVDEV=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_LIBINPUT=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XFONT_FONT_UTIL=y
BR2_PACKAGE_XFONT_ENCODINGS=y
BR2_PACKAGE_XFONT_FONT_ALIAS=y
BR2_PACKAGE_XFONT_FONT_CURSOR_MISC=y
BR2_PACKAGE_XFONT_FONT_MISC_MISC=y
BR2_PACKAGE_XCB_PROTO=y
BR2_PACKAGE_XORGPROTO=y
BR2_PACKAGE_MCOOKIE=y
BR2_PACKAGE_XDATA_XBITMAPS=y
BR2_PACKAGE_XTERM=y
BR2_PACKAGE_XKEYBOARD_CONFIG=y

X -configure не работает (да и все остальные иксовые команды), в логе следующая ошибка:

... fbdev_drv.so: undefined symbol: fbdevHWSave

Лечится созданием файла /etc/X11/xorg.conf со следующим содержанием:

Section "Module"
  Load "fbdevhw"
  Load "shadow"
EndSection

Таким образом иксы запускаются, но X -configure сделать нельзя, т.к. он начинает работу как если бы конфигов нет, а если нет конфига, то теряется fbdevHWSave.

Далее пытался заставить работать мышь.

Section "InputDevice"
        Identifier "Mouse"
        Driver "mouse"
        Option "Protocol" "Logitech" # "auto" делает PS/2
        Option "Device" "/dev/input/event1"
EndSection

И она даже как-то работает. Если протокол поставить auto, ставится по умолчанию PS/2 и курсор улетает куда-то… Если поставить Logitech (поскольку мышь у меня logitech), то курсор как-то хаотично двигается по оси X (и иногда по оси Y) и, судя по всему, ещё и клики делает при движении.

Пробовал ещё такое, но никакого видимого результата не дало, курсор не двигается:

Section "InputClass"
        Identifier "libinput mouse catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
EndSection

А с клавиатурой много перепробовал, всё приводить не хочется. Единственное, сделаю замечание, что драйвер kbd отсутствует, ибо в buildroot он в LEGACY.

Кто тут силён в иксах?

Jullyfish
()

Разблокировка Rockchip MPP на GitHub

 ,

В конце прошлого года репозиторий был заблокирован и было очень много новостей на эту тему.

https://www.opennet.ru/opennews/art.shtml?num=64512

Сейчас его разблокировали, а как и почему, нигде не нашёл. Есть какие-нибудь подробности?

Jullyfish
()

Buildroot. Символическая ссылка на .so файл

 ,

Через механизм br2-external добавил пакеты, которые собираются в *.so файлы. Все из них собираются с помощью обычного Makefile. В мануале написано, что в таком случае надо в libfoo.mk файле поступать следующим образом:

define LIBFOO_INSTALL_TARGET_CMDS
     $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib
     $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d
endef

Как я и сделал в своём *.mk файле. Есть файл libfoo.so.1.2.3, на него должны быть символические ссылки libfoo.so.1 и libfoo.so. Они не создаются. Как правильно сделать, чтобы они создавались при сборке?

Для пакетов, что уже прилагаются к buildroot, эти ссылки создаются, но я так и не смог найти в каком месте. В мануале об этом ничего.

Jullyfish
()