Nowe posty

Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - overcq

Strony: [1] 2 3
1
C/C++ / Odp: Jaki kod błędu zwracać z kernela?
« dnia: 2024-06-09, 09:18:02 »
A “EINVAL” to nie w przypadku podawania do procedury niepoprawnego argumentu?
Na przykład w pliku “fs/ext4/inode.c” są zwracane następujące błędy:
EAGAIN
EBUSY
EFBIG
EFSCORRUPTED
EINVAL
EIO
ENOMEM
ENOSPC
ENOTBLK
EOPNOTSUPP
EOVERFLOW
EPERM
ERANGE
EROFS

Wygląda na to, że panuje pełna dowolność, brak specyfikacji. Niektóre błędy mówią o tym, że coś jest uszkodzone czyli system plików nie jest ‘clean’ (“EFSCORRUPTED”, przy czym jest to niestandardowy błąd), inne – że skończył się zakres liczby (“EOVERFLOW”), jeszcze inne – że system plików jest tylko do odczytu mimo błędu (“EROFS”), podczas gdy “EIO” jest jako ‘default’, głównie przy operacjach odczytu/zapisu.

2
C/C++ / Jaki kod błędu zwracać z kernela?
« dnia: 2024-06-08, 18:26:47 »
Tworzę pewien moduł związany z systemem plików dla kernela Linuksa i zastanawiam się, jaki błąd ma zwracać ‘syscall’ w następującym przypadku: jeśli podczas montowania systemu plików wykryto błąd integralności struktury systemu plików uniemożliwiający zamontowanie. Jeśli by wybierać z podstawowych błędów z pliku “/usr/include/asm-generic/errno-base.h”:
#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* No such file or directory */
#define ESRCH            3      /* No such process */
#define EINTR            4      /* Interrupted system call */
#define EIO              5      /* I/O error */
#define ENXIO            6      /* No such device or address */
#define E2BIG            7      /* Argument list too long */
#define ENOEXEC          8      /* Exec format error */
#define EBADF            9      /* Bad file number */
#define ECHILD          10      /* No child processes */
#define EAGAIN          11      /* Try again */
#define ENOMEM          12      /* Out of memory */
#define EACCES          13      /* Permission denied */
#define EFAULT          14      /* Bad address */
#define ENOTBLK         15      /* Block device required */
#define EBUSY           16      /* Device or resource busy */
#define EEXIST          17      /* File exists */
#define EXDEV           18      /* Cross-device link */
#define ENODEV          19      /* No such device */
#define ENOTDIR         20      /* Not a directory */
#define EISDIR          21      /* Is a directory */
#define EINVAL          22      /* Invalid argument */
#define ENFILE          23      /* File table overflow */
#define EMFILE          24      /* Too many open files */
#define ENOTTY          25      /* Not a typewriter */
#define ETXTBSY         26      /* Text file busy */
#define EFBIG           27      /* File too large */
#define ENOSPC          28      /* No space left on device */
#define ESPIPE          29      /* Illegal seek */
#define EROFS           30      /* Read-only file system */
#define EMLINK          31      /* Too many links */
#define EPIPE           32      /* Broken pipe */
#define EDOM            33      /* Math argument out of domain of func */
#define ERANGE          34      /* Math result not representable */
“EIO”? Ale wydaje się, że jest bardziej związane z błędem odczytu/zapisu.
“EFAULT”?
Brakuje czegoś takiego jak “EDATA”.

3
Używam Chromium, ale pewnie dlatego, że mam do niego napisane kilkanaście rozszerzeń. Jednak ta przeglądarka zawiera kilka uciążliwych błędów oraz od połowy czerwca straci obsługę “Manifest v2”, więc pewnie przesiądę się na Firefoksa, którego i tak mam zainstalowanego, i skonwertuję do niego te rozszerzenia, o ile się będzie dało.

4
Rozumiem, że ‘server’ DNS jest uruchomiony w tym samym systemie? Możliwe, że go nie odpytuje.
Jaką masz zawartość pliku “/etc/resolv.conf”? Oraz wynik polecenia
ip route
?

5
Karty muzyczne / Odp: Linux Mint 21.3 Virginia brak dźwięku
« dnia: 2024-05-09, 14:54:28 »
Sprawdziłem na wersji ‘live’: nie wymaga konfiguracji, odtwarza dźwięk. Natomiast u mnie ‘hostem’ jest Linux.
Pytania dodatkowe ;) :
1. Czy inny system testowy, nowo utworzony, uruchomiony w VirtualBox odtwarza dźwięk?
2. Czy w Windowsie masz inne dźwięki? To może być problem z Windowsem, jego ustawieniami.

6
Karty muzyczne / Odp: Linux Mint 21.3 Virginia brak dźwięku
« dnia: 2024-05-08, 16:06:21 »
Widzę, że masz zainstalowany PipeWire. Przypuszczalnie wymaga konfiguracji.
U mnie, gdy zainstaluję PipeWire, to programy zwykle wybierają ten system i też nie mam dźwięku, nie w maszynie wirtualnej.

7
Na przykład tak:
DEFAULT_ITEM=
if [ -n "$1" ]; then
    DEFAULT_ITEM="--default-item $1"
fi
OUTPUT_0=temp-0.txt
OUTPUT=temp.txt
dialog --clear --title 'Okno dialogowe Menu' --backtitle BASH $DEFAULT_ITEM --menu 'Twój wybór:' 10 40 3 1 'Pozycja 1' 2 'Pozycja 2' 3 'Pozycja 3' 2> "$OUTPUT"
BUTTON=$?
if [ "$BUTTON" -eq 0 ]; then
    echo "Wybrałeś Ok"
    echo $(( $(< "$OUTPUT" ) + 1 )) > "$OUTPUT_0"
    exec sh untitled.sh $(< "$OUTPUT_0" )
elif [ "$BUTTON" -eq 1 ]; then
    echo "Wybrałeś Anuluj"
    exec sh untitled.sh $(< "$OUTPUT_0" )
else
    echo "Niczego nie wybrałeś"
fi
echo $(< "$OUTPUT" )

8
Nie wiem o co dokładnie pytasz.
Jeśli chcesz przejść do drugiego wiersza w dialogu, to możesz użyć klawisza strzałki w dół lub 2.
Jeśli chcesz, żeby skrypt przeszedł do obsługi wybranej pozycji menu dialogu po jego zamknięciu, to potrzebujesz odczytać zawartość zmiennej “$BUTTON” w drugim przypadku, a nie tekstu “BUTTON”. Czyli coś w rodzaju:
OUTPUT=temp.txt
> "$OUTPUT"
dialog --clear --title 'Okno dialogowe Menu' --backtitle BASH --menu 'Twój wybór:' 10 40 3 1 'Pozycja 1' 2 'Pozycja 2' 3 'Pozycja 3' 2> "$OUTPUT"
BUTTON=$?
if [ "$BUTTON" -eq 0 ]; then
    echo "Wybrałeś Ok"
elif [ "$BUTTON" -eq 1 ]; then
    echo "Wybrałeś Anuluj"
    exec sh untitled.sh
else
    echo "Niczego nie wybrałeś"
fi
echo $(< "$OUTPUT" )

9
Gry / Odp: Problem ze sterownikami.
« dnia: 2024-04-12, 17:21:27 »
Z tego, co jest w sieci, wynika, że “nouveau” nie obsługuje akceleracji dwuwymiarowej, nie wspiera zmiany częstotliwości zegara dla tej karty oraz wymaga ‘firmware’ podpisanego przez Nvidię do zainicjowania karty.
Natomiast ciekawi mnie, jakie są komunikaty dla gry, która działa, przy obecnej konfiguracji. Takiej gry, która wykorzystuje OpenGL.

10
Już to znalazłem czytając źródła “emerge”.
“emerge” ma ‘scheduler’ w “/usr/lib/python3.11/site-packages/_emerge/Scheduler.py”, który zawiera od linii 1524:
             # By default, merge-wait only allows merge when no builds are executing.
             # As a special exception, dependencies on system packages are frequently
             # unspecified and will therefore force merge-wait.
             is_system_pkg = build.pkg in self._deep_system_deps
             if not build.build_opts.buildpkgonly and (
                 "merge-wait" in build.settings.features or is_system_pkg
             ):
                 self._merge_wait_queue.append(merge)
                 if is_system_pkg:
                     merge.addStartListener(self._system_merge_started)
             else:
                 self._task_queues.merge.add(merge)
                 merge.addExitListener(self._merge_exit)
                 self._status_display.merges = len(self._task_queues.merge)
Za wyłączenie tego mechanizmu odpowiada “-merge-wait” w zmiennej FEATURES.

Jednak według mnie powinno być to trochę inaczej rozwiązane.
Jeśli ‘scheduler’ gwarantowałby zatrzymywanie kompilacji przebiegającej w osobnych wątkach i wtedy wykonywał “merge”, to wtedy ten mechanizm mógłby pozostać włączony. Ale do tego najlepiej potrzebna by była wiedza o zależnościach kompilacji pakietów od tych, które są właśnie skompilowane.

11
Od którejś aktualizacji ‟portage” zauważyłem, że przy większej ilości paczek instalowanych naraz jednym poleceniem (np. “emerge --emptytree @world”) są one kompilowane w seriach, ale nie instalowane (i kompilacje nie usuwane) do czasu zakończenia serii. Powoduje to konieczność posiadania przestrzeni dyskowej (w “/var/tmp/portage”) na wszystkie kompilacje paczek z danej serii. Tutaj przykład.
Dodam, że w “/etc/portage/make.conf” mam ustawione:
MAKEOPTS=-j2
EMERGE_DEFAULT_OPTS='--ask-enter-invalid --jobs=2 --quiet-build'
Czyli maksymalnie dwa zadania kompilacji, w których będą maksymalnie dwa równoległe “make”.
Czy za ilość kompilacji w serii przed instalacją paczek odpowiada jakaś opcja?

13
Inne / Ile pingwinów?
« dnia: 2024-03-27, 05:42:07 »
Zastanawiam się, ile obrazków pingwina wyświetla się przy starcie kernela Linuksa dla procesorów takich jak Intel i7 lub i9, który może mieć do 18 rdzeni. Poza tym chyba są różne rodzaje rdzeni. (U mnie na starym i5 wyświetlają się cztery.)

14
Sterownik ze strony EDUP zawiera źródła do kompilacji modułu kernela, “wpa_supplicant”, narzędzia i jakąś dokumentację.
Nawet jeśli pobierzesz ten sterownik, to jest on przestarzały i nie nada się do nowych kerneli. Ale załączyłem plik poprawek (‘patch’), który umożliwia kompilację dla kernela 6.7.9.
Moduł kernela trzeba skompilować ze źródeł, więc w systemie musisz mieć środowisko kompilacji modułów kernela. “wpa_supplicant” może wystarczy ten dostarczony z dystrybucją Linuksa, a może będzie potrzeba skompilować ze źródeł ze zmianami.
Nie wiem, jak jest w Kali Linux, ale u mnie w Gentoo dało się skompilować moduł, a z doświadczenia z moją, starą kartą WiFi wiem, że trzeba było też skompilować “wpa_supplicant”, ponieważ karta nie obsługuje jego nowszych funkcji. Po załadowaniu modułu i uruchomieniu “wpa_supplicant” okaże się, czy potrzebna jest jego dostosowana wersja.

Jeśli orientujesz się w tym, co robić i jak przygotować środowisko kompilacji, to tu jest instrukcja:
Na stronie https://www.szedup.com/support/driver-download/usb-adpeter/ax1685/ jest przycisk “For Linux” “Download”. Stamtąd pobierasz plik “RTL8832AU_WiFi_linux_v1.15.0.1-0-g487ee886.20210714.tar.gz”. Rozpakowujesz.
W rozpakowanym katalogu “RTL8852AU_WiFi_linux_v1.15.0.1-0-g487ee886.20210714” przechodzisz do podkatalogu “drivers” i rozpakowujesz plik “rtl8852AU_WiFi_linux_v1.15.0.1-0-g487ee886.20210714.tar.gz”.
Stosujesz ‘patch’, który załączyłem do posta. Wykonujesz jako “root” polecenie “make”, a następnie “make install”. Ładujesz moduł “8852au” do kernela.

Nie mogę zagwarantować, że z tak poprawionych źródeł modułu powstanie poprawnie działający sterownik.

15
Inne / Odp: Jak zmienić lokalizację zapasowej tablicy GPT?
« dnia: 2024-01-06, 11:42:54 »
Problem był w tym, że zapasowa tablica partycji nie mogła być zapisana na dysk z powodu błędu zapisu sektora.

Rozwiązałem to ręcznie: przesunąłem (skopiowałem z podstawowej) zapasową tablicę partycji wstecz o kilkadziesiąt sektorów w obszarze nie używanym przez ostatnią partycję na dysku (jest taki obszar ok. 700 kB), zmodyfikowałem ‘header’ zapasowej tablicy partycji, w którym ustawiłem nową lokalizację tablicy partycji i sumę kontrolną ‘headera’.

Wykorzystałem następujący skrypt, gdzie “binary-read” i “binary-write” to programy pakietu binary-change:
Kod: shell [Zaznacz]

#!/bin/bash
#*******************************************************************************
trap 'rm "$header" "$header_crc32" "$table"' EXIT
header="$( mktemp )"
header_crc32="$( mktemp )"
table="$( mktemp )"
#===============================================================================
dd if=/dev/sda of="$header" bs=512 skip=1 count=1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
header_sector=$( binary-read -f "$header" -p 0x20 -l -s 8 )
table_sector=$(( $header_sector - 32 - 32 ))
partition_last_sector=$( fdisk -l /dev/sda | tail -n 2 | head -n 1 | sed -e 's`^[^ ][^ ]*  *[0-9][0-9]*  *\([0-9][0-9]*\).*$`\1`' )
if [ $header_sector -le $partition_last_sector -o $table_sector -le $partition_last_sector ]; then
    echo 'Header or table sector too low'
    exit 1
fi
binary-write -f "$header" -p 0x10 -l -s 4 -d 0 -p 0x30 -l -s 8 -d $(( $table_sector - 1 ))
dd if="$header" of="$header_crc32" bs=92 count=1
crc32=$( crc32 "$header_crc32" )
binary-write -f "$header" -p 0x10 -l -s 4 -d 0x$crc32
dd if="$header" of=/dev/sda bs=512 seek=1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dd if=/dev/sda of="$table" bs=512 skip=2 count=32
binary-write -f "$header" -p 0x10 -l -s 4 -d 0 -p 0x18 -l -s 8 -d $header_sector -p 0x20 -l -s 8 -d 1 -p 0x48 -l -s 8 -d $table_sector
dd if="$header" of="$header_crc32" bs=92 count=1
crc32=$( crc32 "$header_crc32" )
binary-write -f "$header" -p 0x10 -l -s 4 -d 0x$crc32
dd if="$header" of=/dev/sda bs=512 seek=$header_sector
dd if="$table" of=/dev/sda bs=512 seek=$table_sector
gdisk -l /dev/sda
#*******************************************************************************

Strony: [1] 2 3