Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.
Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.
Po více než dvou letech od vydání předchozí verze 2.12 byla vydána nová stabilní verze 2.14 systémového zavaděče GNU GRUB (GRand Unified Bootloader, Wikipedie). Přehled novinek v souboru NEWS a v aktualizované dokumentaci.
Google Chrome 144 byl prohlášen za stabilní. Nejnovější stabilní verze 144.0.7559.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 10 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube).
Microsoft zveřejnil zdrojový kód XAML Studia a uvolnil ho pod MIT licencí. XAML Studio je nástroj ze světa Windows, určený pro tvorbu uživatelského rozhraní aplikací pomocí XAML (Extensible Application Markup Language). Stalo se tak zhruba po osmi letech od prvního prohlášení Microsoftu, že se tento kód chystá zveřejnit.
TimeCapsule, 'časová kapsle', je jazykový model trénovaný výhradně na datech z určitých míst a časových období, aby se tak napodobila autentická slovní zásoba, způsob vyjadřování a názory dané doby. Na Hugging face jsou k dispozici modely natrénované na historických textech dostupných v oblasti Londýna mezi lety 1800 až 1875.
Radicle byl vydán ve verzi 1.6.0 s kódovým jménem Amaryllis. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Zemřel Scott Adams, tvůrce komiksových stripů Dilbert parodujících pracovní prostředí velké firmy.
Sdružení CZ.NIC vydalo novou verzi Knot Resolveru (6.1.0). Jedná se o první vydanou stabilní verzi 6, která je nyní oficiálně preferovanou a doporučovanou verzí, namísto předešlé verze 5. Více o Knot Resolveru 6 je možné se dočíst přímo v dokumentaci.
Byl vydán Linux Mint 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
/dev, vybírám zařízení s názvy sg<číslo>, otevřu a přes ioctl pošlu SCSI_INQUIRY a pak testuju vrácená inquiry data, byte 1, bity 0-5 na hodnotu 0x05.
Jenže prohledávání /dev adresáře je docela pomalé, dochází tam k neustálému kopírování řetězců, a tak hledám nějaký lepší způsob.
Řešení dotazu:
/sys musí stačit.
GetLogicalDrives() dostanu zařízení a funkcí GetVolumeType() dostanu info, jestli jde o CD-ROM, aniž by se požadavek posílal mechanice, protože to už Windows "ví".
Tak mi tedy řekněte, kde v /sys ty mechaniky najdu, sice něco najdu, ale ať tam hledám jak divej, nikde nenalézám symlink na zařízení /dev/sg*
find /sys/devices -name 'media' | while read media; do [[ "$(<$media)" == "cdrom" ]] && echo "$media" done
find /sys/devices -name 'media' mi tu nenajde vůbec nic ...
hal-device $(hal-find-by-capability --capability storage.cdrom) | grep sysfs
tak mi cdrom najde podle "capabilities". Je jich více: { 'storage', 'block', 'storage.cdrom' }
Ve vygrepovaném adresáři v sysfs sice také existuje soubor capabilities, ale tam je jen "19". Kdyby to znamenalo cdrom (nedaří se mi najít význam toho souboru či čísla) tak by to mohlo pomoct:
find /sys/devices -name 'capability' | while read capability; do
[[ "$(<$capability)" == "19" ]] && echo "$capability"
done
ale bohužel jsem z toho jinak jelen :(
hal-device $(hal-find-by-property --key storage.drive_type --string cdrom) | grep sysfs
ale jinak tomu vůbec nerozumím (to asi nemusím říkat).
/sys/bus/scsi/. Jsou tam adresy zařízení ve tvaru A:B:C:D. Když do toho kouknu, jsou tam mimo jiné i údaje z inquery struktury (vendor, model, rev, ...) včetně type (5 = CD-ROM). Dále v tom adresáři je adresář scsi_generic, v něm adresář sg1 atd. Jenže tam nikde nevidím link na soubor s zařízením, který bych byl schopen otevřít a posílat SCSI příkazy, což je můj cíl (tak trochu si hraju a chci se dopracovat ke smazání cédéčka).
/sys/devices. HAL vám nenutím, měl sloužit jen k identifikaci problému.
Zatím je rozdíl v tom, že vy máte scsi a já ide cd-rom.
Chcete říct, že vám ten hal to zařízení v /sys/devices nenašel?
Osobně mám v /sys/devices jak ide tak scsi zařízení.
/sys/devices/pci0000:00/0000:00:1f.2/host1/target11:0:0/1:0:0:0/block/sr0, ale z toho taky nedostanu cestu k zařízení. Navíc zařízení /dev/sr0 nemůžu SCSI příkazy posílat, jeho otevřením se totiž otevře to médium, co tam je, musí se otevřít generické scsi zařízení /dev/sgX.
Škoda, že se kvůli debilní licenci nemůžu podívat do zdrojáků cdrecordu nebo wodimu. Zkusím naně strace ... á, někdo si může stěžovat na můj přístup, co dělá wodim. Zkouší otevírat všechna zařízení /dev/hda až /dev/hdz, /dev/scd1 až /dev/scd255 a pokud se je podaří otevřít, posílá jim SCSI příkazy. Takže opravdu zůstanu u svého způsobu, když to jinak očividně nejde.
Taky nechápu, proč wodim používá flag O_EXCL pro volání open() bez O_CREAT, když manuálová stránka píše, že je pak výsledek nedefinovaný.
[petr@nt /sys/devices]$ hal-device $(hal-find-by-property --key storage.drive_type --string cdrom) | grep sysfs linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:11.0/host1/target1:0:0/1:0:0:0/block/sr0' (string) [petr@nt /sys/devices]$
Link tam nie je (pretoze moze byt lubovolny pocet suborov, ktore reprezentuju toto zariadenie) - ale v adresari block najdes subor dev, v ktorom je MAJOR a MINOR.vám sice následně ruply nervy, ale osobně nepovažuji za velký problém projít těch pár AKTIVNÍCH sg zařízení, otevřít pár souborů dev a přečíst si major a minor, čímž mám /dev/srX (v případě scsi). Zkuste mrknout na sg_map, v nové verzi pracuje se sysfs.
$ sg_map # Note: the devfs pseudo file system is present /dev/sg0 /dev/sda /dev/sg1 /dev/sr0 /dev/sg2 /dev/sr1Samozřejmě je pořád možnost dělat to postaru, pokud jste pod tlakem.
)), tak smůla.
A může mi někdo ještě osvětlit atribut O_EXCL u open(), když není uveden O_CREAT? V manuálové stránce se popisuje nedefinované chování, ale wodim/cdrecord ho tak používají.
Hledání CD-ROM mechanik a jejich vložení do seznamu má ve Windows verzi 34 řádků (počítám i řádky, které mají jen otevírací/uzavírací závorky {,}).
V Linuxové verzi jsem teď na 174 řádcích a teď zbývá ještě dopsat kód na prohledání celého /dev pro případ, že zařízení /dev/jméno_co_se_našlo_v_sysfs neexistuje, nebo se jeho major/minor neshoduje s tím v /sys.
Kdyby někoho zajímalo, jak to vypadá ve Windows:
TSCSIDrive *drive;
TSCSIDrive tmpDrive;
uint8_t device_type;
/*
* Using GetLogicalDrives() could speed up things, but there is always
* possibility, that drive has no letter assigned, is mounted to NTFS
* folder or it is not even mounted. This way we handle all these cases.
*/
HANDLE hVolumeSearch;
/*
* Volume name is in "\\?\Volume{ITS_GUID}\" format,
* GUID's format is AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
*/
WCHAR volumeName[MAX_PATH];
hVolumeSearch = FindFirstVolumeW(volumeName, MAX_PATH);
if (hVolumeSearch != INVALID_HANDLE_VALUE)
{
do
{
volumeName[MAX_PATH-1] = 0;
if (GetDriveTypeW(volumeName) == DRIVE_CDROM)
{
tmpDrive._open_fn = volumeName;
// remove trailing slash so that we open drive itself and not
// the medium inserted
if (tmpDrive._open_fn[tmpDrive._open_fn.size()-1] == '\\')
{
tmpDrive._open_fn.erase(tmpDrive._open_fn.size()-1);
}
if (tmpDrive.openDrive())
{
tmpDrive.setTimeout(10);
// request inquiry data and make sure OS didn't lie to us
if (tmpDrive.inquiry(tmpDrive._inqData, TSCSIDrive::INQUIRY_DATA_SIZE))
{
device_type = (tmpDrive._inqData[0] & 0x1F);
if (device_type == 0x05 /* CD-ROM */)
{
drive = new TSCSIDrive();
tmpDrive.readScsiAddress(drive->_address);
drive->_open_fn = std::move(tmpDrive._open_fn);
memcpy(drive->_inqData, tmpDrive._inqData, TSCSIDrive::INQUIRY_DATA_SIZE);
_drives.push_back(drive);
}
}
tmpDrive.closeDrive();
}
tmpDrive._open_fn.clear();
}
} while (FindNextVolumeW(hVolumeSearch, volumeName, MAX_PATH));
FindVolumeClose(hVolumeSearch);
}
system("lsscsi | grep ...") :)
)
Documentation/sysfs-rules.txt a další.
vojta|vojta-dell ~ $> pkg-config --list-all | grep -i cd
libcdt libcdt - Container DataType library
libudf libudf - UDF library of libcdio
libcdio++ libcdio++ - C++ OO Portable CD-ROM I/O library
libcdio libcdio - Portable CD-ROM I/O library
libiso9660++ libiso9660++ - C++ OO ISO-9660 library of libcdio
libiso9660 libiso9660 - ISO-9660 library of libcdio
gstreamer-cdda-0.10 GStreamer CDDA Library - CDDA base classes
libcdio_cdda libcdio_cdda - CD paranoia CD-DA library from libcdio
libcdio_paranoia libcdio_paranoia - CD paranoia library from libcdio
libcddb libcddb - CDDB server access library
vojta|vojta-dell ~ $> pkg-config --list-all | grep -i devic
libgphoto2_port libgphoto2_port - Device-independent access to serial, USB, and other ports
devkit-power-gobject devkit-power-gobject - DeviceKit-power is a system daemon for installing stuff.
gnome-bluetooth-1.0 gnome-bluetooth-1.0 - Widgets for Bluetooth device selection
usbutils usbutils - USB device database
libmtp libmtp - libmtp is a library for accessing Media Transfer Protocol devices
devmapper-event devmapper-event - device-mapper event library
pciaccess pciaccess - Library providing generic access to the PCI bus and devices.
libsynce libsynce - A helper library for SynCE, a framework to sync WinCE devices
libavdevice libavdevice - FFmpeg device handling library
DeviceKit-disks DeviceKit-disks - DeviceKit-disks daemon
blkid blkid - Block device id library
devmapper devmapper - device-mapper library
libv4l2 libv4l2 - v4l2 device access library
hal-storage hal-storage - hal library for storage devices and volumes
libudev libudev - Library to access udev device information
vojta|vojta-dell ~ $> pkg-config --list-all | grep -i dvd
dvdread libdvdread - Low level DVD access library
dvdnavmini libdvdnavmini - DVD Navigation mini library
libdvdcss libdvdcss - DVD access and decryption library.
dvdnav libdvdnav - DVD Navigation library
vojta|vojta-dell ~ $>
Především ta prostřední skupina mi přijde zajímavá.
/sys/devices.
Utilita tu už taky byla, jmenuje se sg_map. Nová verze sg_map26 překvapivě funguje nad /sys... Takže pokud nepoužíváš jádro 2.4...
Hovoříš o linuxu a máš něco proti souborům? Dobré ráno. V linuxu je všechno důležité soubor, a pokud ne soubor, tak alespoň virtuální filesystém. sysfs je standardní rozhraní a má světlou budoucnost (TM).
V linuxu to takto prostě funguje, filesystém a soubory jsou rozhraní k jádru, zařízením a dalším věcem. Je to základní princip fungování, ne něco špatného či nevhodného. Není lepší způsob, protože sysfs není špatný způsob.
Pět minut je fakt málo.
find někde na /proc nebo /sys, to je prostě blbost.
Tiskni
Sdílej: