QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hájtek] mkfs és fsck cygwin alatt (dosfstool) (frissítve)

2010.12.17. 12:00 | TrueY | Szólj hozzá!

Címkék: windows 2010 hájtek cygwin

FAT32-es file-rendszert kellett nézegetnem windows-os gépen. Van egy "gyári" 4 GB-os SD kártyám, amin FAT32 van. A CPAN-on találtam egy csomagot (FileSystem::LL::FAT), amivel nézegetni lehet egy már létrehozott FAT32 partíciót. A gyári FAT32 alapján próbáltam a "dos"-os format-tal létrehozni egy ugyanolyat, de azzal egy csomó minden nem lehet beállítani, így azzal nem tudtam ugyanolyan FAT32-es file-rendszer létrehozni (pl. hidden sectors beállítás).

Ezért cygwin alatt próbálkoztam valamit csinálni. Nézegettem, de a Linux-tól jól ismert /usr/sbin/mkfs.vfat.exe nincs, sem /usr/sbin/fsck.vfat.exe. Nézegettem a cygwin.com-on, de ott sem találtam semmiféle hivatkozást ezekre. Nem találtam doksit sem, hogy miért nincs. Hosszas böngészés után végül találtam egy oldalt, amin említés történik az mkdosfs programra. No ezen a nyomon elindultam. Egy honlapon találtam egy hivatkozást a dosfstool (v2.11) csomagra amiben megtalálhatóak az mkdosfs és a dosfsck programok. Ennek installálásáról szól ez a történet.

Naszóval... 7z-vel kicsomagoltam a cuccost (dosfstool-2.11 könyvtárba), majd ráengedtem a make-t. Erre dobott egy csomó hibát. Szépen-fokozatosan kiszűrtem a beállítási problémákat. Pár linux-os header file-t az internetről kellett levadászni, párnál pedig a hivatkozás path-át kellett átírni jellemzően "linux/"-ről "cygwin/"-re. Bocs, hogy nem "diff -ur"! >>Érdemes végigolvasni, mert a végén vannak patch file-ok is!<<

  • Makefile
    OPTFLAGS = -O2 -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_WIN32
  • dosfsck/fd.h header file-t levadásztam a netről (//From: http://kernelhistory.sourcentral.org/linux-1.1.3/S/102.html). Nem akartam a /usr/include alá pakolgatni a leszedett file-okat, ezért inkább beraktam a dosfsck/fd.h alá.
  • dosfsck/msdos_fs.h header-t innen szedtem le: //From: http://www.kneuro.net/cgi-bin/lxr/http/source/include/linux/msdos_fs.h?a=m68k#L72
  • mkdosfs/mkdosfs.c
    #include <winioctl.h>

    + #include <mingw/fcntl.h>
  • dosfsck/io.c
    #include <fcntl.h>
    - #include <linux/fd.h>
    + #include "fd.h"
  • dosfsck/file.c
    + #ifndef _WIN32
    #include <linux/version.h>
    ...
    #endif
    + #endif

    - #include <linux/msdos_fs.h>
    + #include <asm/types.h>
    + #include "msdos_fs.h"
  • dosfsck/dosfsck.h
    + #ifndef _WIN32
    #include <linux/version.h>
    ...
    #endif
    + #endif
    +
    - #include <linux/msdos_fs.h>
    + #include <cygwin/fs.h>
    + #include <asm/types.h>
    + #include "msdos_fs.h"
  • dosfsck/common.h
    + #ifndef _WIN32
    #include <linux/version.h>
    ...
    #endif
    + #endif

Ezekkel a módosításokkal sikerült leforgatnom. Az elkészült mkdosfs.exe-t és a dosfsck.exe-t átraktam a ~/bin-be (ne felejtsük el a PATH-hoz hozzáadni!). Az mkdosfs.8 és dosfsck.8-at a ~/man/man8-ba (ne felejtsük el a MANDIR-hoz hozzáadni!) másoltam.

Az elérhető partíciókat a "cat /proc/partitions" paranccsal lehet megnézegetni. Sajnos az nem mérvadó, hogy a windows melyik drive-ra map-pel fel az SD kártyát. Viszont ha kihúzzuk az SD kártyát a kártya olvasóból, akkor az adott drive eltűnik a /proc/partitions-ból. Ez jól használható, ha ellenőrizni szeretnénk, hogy van-e kártya az adott olvasóban. Ha csak egy partíció van, akkor a /dev/sd[a-z]1-et tudjuk használni. A perl csomag is tud erre hivatkozni.

"dosfsck.exe -v /dev/sdd1"-re elég részletes leírást adott...

Érdekes, hogy az mkdosfs nem fogadja el a cygwin-es device-t, csak a DOS-os betűjelzést:

$ mkdosfs -F 32 /dev/sdd1
mkdosfs 2.11 (12 Mar 2005)
Win32 port by Jens-Uwe Mager <jum@anubis.han.de>
/dev/sdd1: The system cannot find the path specified.

$ mkdosfs -F 32 -v G:
./mkdosfs 2.11 (12 Mar 2005)
Win32 port by Jens-Uwe Mager <jum@anubis.han.de>
\\.\G: has 255 heads and 63 sectors per track,
logical sector size is 512,
using 0xf8 media descriptor, with 7733248 sectors;
file system has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 7538 sectors, and provides 964767 clusters.
Volume ID is 4cf8add6, no volume label.


(...kicsit később...) Nézegettem az mkdosfs.c-t és azt hiszem, hogy kár volt elcsábulni a _WIN32 definiálásával. Ezért nem tudom a /dev/sd[a-z]1 megadásával formázni! Nekiugrok a Linux-os kódnak a __CYGWIN__ macro-val. Csináltam hát egy patch file-t, amivel meg lehet hákolni hogy cygwin alatt is menjen. Így már szebb lett:

  1. dosfstool (v2.11) letölt
  2. 7z x -tzip dosfstools-2.11.src.zip
  3. dosfstools-2.11.cygwin.patch.txt letölt. A *.txt azért kell a végére, mert különben nem tudom a blog File-kezelőjébe feltenni.
  4. patch -p0 -i dosfstools-2.11.cygwin.patch.txt
    Ez a "dosfstools-2.11" könyvtárat foltozza meg. Előtte érdemes lehet egy dos2unix-ot kiadni a patch file-ra!
  5. cd dosfstools-2.11
  6. make
  7. Bemásolhatjuk a file-okat egy megfelelő helyre. Én ezt tettem:
    cp -i dosfsck/dosfsck.exe ~/bin
    cp -i mkdosfs/mkdosfs.exe ~/bin
    cp -i mkdosfs/mkdosfs.8 ~/man/man8/
    cp -i dosfsck/dosfsck.8 ~/man/man8/
    Persze előtte érdemes a man/man8-at legyártani a home könyvtárunk alatt. Így (ha elég okos a -bash_proofile-ünk), akkor egy kiláb-visszalép (vagy .bash_profile futtatás után) leérhetjük a progikat és a man page-eket is.

Egy warningot nem javítottam ki a kódban (mkdosfs.c:1814: warning: 'cblocks' might be used uninitialized in this function), de megnéztem a kódot és ez nem okozhat gondot. Így marad.

[2013-04-04] Később a gcc (GCC) 4.5.3 már felokosodott és egy csomó warningot szór. De ettől még fordul a kód. Megnéztem a dosfsck.exe -v /dev/sdd1 nem jól írja ki a "Serial No", "Volume name" és "FAT name" értékeket. Pedig a Total Commander látja a Volume Name-et.[/]

Most már rendesen működik Cygwin alatt is:
$ mkdosfs -F 32 -v -s 64 -R 6304 -n "@123456789A" /dev/sdd1

Ami hiányzik: nem lehet megadni, hogy hány HEAD legyen. Bár szerintem ezt senki nem használja, de pont ugyanolyan kártyát szerettem volna csinálni, mint a "gyári" kártya és ott 128 head volt. Hozzá hákoltam hát egy -H opciót is, amivel az is megadható... A folt (dosfstools-2.11.heads.patch.txt) az előző folt után alkalmazandó, ugyanúgy. A man page nincs javítva. Majd nagyon egyszer!

A dosfsck-t is megfoltoztam, hogy kiírja a FAT32-es adatokat is (volume name, fat name, serial number, miazmás). Az itt érhető el: dosfstools-2.11.fat32.patch.txt. A heads folttal együtt, de nélküle is alkalmazható!

(Most vettem észre, hogy C++-os // megjegyzéseket használtam. Akinek ez gondot okoz a fordításnál, annál bocs!)

Uno, DOS, tres...

Számoljunk minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr272489297

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása