LINUX.ORG.RU

g_file_storage не могу продуматься


0

1

Есть железка на арме, создал файл «b_file» 32 метра, fdsik'ом разметил его под дос-формат, losetup -o 4096 /dev/loop0 b_file && modprobe g_file_storage /dev/loop0. Подключаю железку к сатанинской системе, он находит её как usb-накопитель (правда сначало пришлось в «управлении дисками» отформатировать в FAT) видит 32 метра, я туда заливаю файло. Все прекрасно, но мне надо видеть это файло в linux на самом устройстве, делаю mount /dev/loop0 /mnt -t vfat он монтирует, df -h показывает что это устройство 32 метра, mount показывает что это диск в формате Win95, но я там не вижу файла которое залили с windows-машины, модуль vfat загружен. Забиваю полностью 32 метра со стороны виндовс, делаю df -h на линуксе, он показывает что свободно 32 метра, со стороны винды показывает что места нет. Гашу g_file_storage, в винде устройство тухнет, поднимаю g_file_storage в винде устройство опять находится открываю а там все те файлики которые я залил с винды, а в линуксе все так же показывает что устройство /dev/loop0 смонтированно в /mnt и в нем места 32 метра свободно. Если забивать /mnt со стороны линукса, то в винде, файлы которые я переношу в /mnt, также не видно. Как мне заставить видеть в линуксе файлы, которые я как на флешку записываю с винды используя модуль g_file_storage?

★★★★★

Перенес b_file на ubuntu, так же подцепил его через losetup, примонтировал в /mnt/tmp, при листинге получаю ужасную кашу:

splinter@LNM:~$ sudo mount -t vfat -o codepage=866,utf8 /dev/loop0 /mnt/tmp 
splinter@LNM:~$ ls /mnt/tmp
ls: cannot access /mnt/tmp/PPPP.P: Input/output error
ls: cannot access /mnt/tmp/PPPP.p: Input/output error
ls: cannot access /mnt/tmp/!P"P#P$P.%P&: Input/output error
ls: cannot access /mnt/tmp/1P2P3P4P.5p6: Input/output error
ls: cannot access /mnt/tmp/APBPCPDP.EPF: Input/output error
ls: cannot access /mnt/tmp/QPRPSPTP.upv: Input/output error
ls: cannot access /mnt/tmp/aPbPcPdP.ePf: Input/output error
┴@┬@├@─@.┼@╞  a@b@c@d@.e@f  !B"B#B$B.%B&  ▒P▓P│P┤P.╡p╢  q@r@s@t@.u@v  ?U?U?U?U.?u?  бQвQгQдQ.еQж  сAтAуAфA.хAц
!@"@#@$@.%@&  A@B@C@D@.E@F  ?B?B?B?B.?B?  ╤P╥P╙P╘P.╒p╓  Q@R@S@T@.u@v  ┴U┬U├U─U.┼U╞  БQВQГQДQ.ЕQЖ  СAТAУAФA.хaц
?@?@?@?@.?@?  aCbCcCdC.eCf  ▒C▓C│C┤C.╡c╢  ?P?P?P?P.?p?  qSrSsStS.usv  !U"U#U$U.%U&  бRвRгRдR.еRж  сBтBуBфB.хBц
▒@▓@│@┤@.╡@╢  ACBCCCDC.ECF  ╤C╥C╙C╘C.╒c╓  ┴P┬P├P─P.┼P╞  QSRSSSTS.usv  ?U?U?U?U.?U?  БRВRГRДR.ЕRЖ  СBТBУBФB.хbц
╤@╥@╙@╘@.╒@╓  aDbDcDdD.eDf  ?C?C?C?C.?c?  !P"P#P$P.%P&  qTrTsTtT.utv  ▒V▓V│V┤V.╡v╢  бSвSгSдS.еSж  сCтCуCфC.хCц
?@?@?@?@.?@?  ADBDCDDD.EDF  ┴C┬C├C─C.┼C╞  ?P?P?P?P.?P?  QTRTSTTT.utv  ╤V╥V╙V╘V.╒v╓  БSВSГSДS.ЕSЖ  СCТCУCФC.хcц
1@2@3@4@.5@6  aEbEcEdE.eEf  !C"C#C$C.%C&  qArAsAtA.uav  qUrUsUtU.uuv  ?V?V?V?V.?v?  бTвTгTдT.еTж  сDтDуDфD.хDц
1A2A3A4A.5a6  AEBECEDE.EEF  ?C?C?C?C.?C?  QARASATA.uav  QURUSUTU.uuv  ┴V┬V├V─V.┼V╞  БTВTГTДT.ЕTЖ  СDТDУDФD.хdц
1B2B3B4B.5b6  aFbFcFdF.eFf  ▒D▓D│D┤D.╡d╢  qBrBsBtB.ubv  qVrVsVtV.uvv  !V"V#V$V.%V&  бUвUгUдU.еUж  сEтEуEфE.хEц
1C2C3C4C.5c6  AFBFCFDF.EFF  ╤D╥D╙D╘D.╒d╓  QBRBSBTB.ubv  QVRVSVTV.uvv  ?V?V?V?V.?V?  БUВUГUДU.ЕUЖ  СEТEУEФE.хeц
1D2D3D4D.5d6  aGbGcGdG.eGf  ?D?D?D?D.?d?  qCrCsCtC.ucv  qWrWsWtW.uwv  ▒W▓W│W┤W.╡w╢  бVвVгVдV.еVж  сFтFуFфF.хFц
1E2E3E4E.5e6  AGBGCGDG.EGF  ┴D┬D├D─D.┼D╞  QCRCSCTC.ucv  QWRWSWTW.uwv  ╤W╥W╙W╘W.╒w╓  БVВVГVДV.ЕVЖ  СFТFУFФF.хfц
1F2F3F4F.5f6  aPbPcPdP.ePf  !D"D#D$D.%D&  qDrDsDtD.udv  ▒R▓R│R┤R.╡r╢  ?W?W?W?W.?w?  бWвWгWдW.еWж  сGтGуGфG.хGц
1G2G3G4G.5g6  APBPCPDP.EPF  ?D?D?D?D.?D?  QDRDSDTD.udv  ╤R╥R╙R╘R.╒r╓  ┴W┬W├W─W.┼W╞  БWВWГWДW.ЕWЖ  СGТGУGФG.хgц
1P2P3P4P.5p6  aQbQcQdQ.eQf  ▒E▓E│E┤E.╡e╢  qErEsEtE.uev  ?R?R?R?R.?r?  !W"W#W$W.%W&  б@в@г@д@.е@ж  сPтPуPфP.хPц
1Q2Q3Q4Q.5q6  AQBQCQDQ.EQF  ╤E╥E╙E╘E.╒e╓  QERESETE.uev  ┴R┬R├R─R.┼R╞  ?W?W?W?W.?W?  Б@В@Г@Д@.Е@Ж  СPТPУPФP.хpц
1R2R3R4R.5r6  aRbRcRdR.eRf  ?E?E?E?E.?e?  qFrFsFtF.ufv  !R"R#R$R.%R&  бAвAгAдA.еAж  ёAЄAєAЇA.їaў  сQтQуQфQ.хQц
1S2S3S4S.5s6  ARBRCRDR.ERF  ┴E┬E├E─E.┼E╞  QFRFSFTF.ufv  ?R?R?R?R.?R?  БAВAГAДA.ЕAЖ  ёBЄBєBЇB.їbў  СQТQУQФQ.хqц
1T2T3T4T.5t6  aSbScSdS.eSf  !E"E#E$E.%E&  qGrGsGtG.ugv  ▒S▓S│S┤S.╡s╢  бBвBгBдB.еBж  ёCЄCєCЇC.їcў  сRтRуRфR.хRц
1U2U3U4U.5u6  ASBSCSDS.ESF  ?E?E?E?E.?E?  QGRGSGTG.ugv  ╤S╥S╙S╘S.╒s╓  БBВBГBДB.ЕBЖ  ёDЄDєDЇD.їdў  СRТRУRФR.хrц
1V2V3V4V.5v6  aTbTcTdT.eTf  ▒F▓F│F┤F.╡f╢  qPrPsPtP.upv  ?S?S?S?S.?s?  бCвCгCдC.еCж  ёEЄEєEЇE.їeў  сSтSуSфS.хSц
1W2W3W4W.5w6  ATBTCTDT.ETF  ╤F╥F╙F╘F.╒f╓  QPRPSPTP.upv  ┴S┬S├S─S.┼S╞  БCВCГCДC.ЕCЖ  ёFЄFєFЇF.їfў  СSТSУSФS.хsц
▒A▓A│A┤A.╡a╢  aUbUcUdU.eUf  ?F?F?F?F.?f?  ▒Q▓Q│Q┤Q.╡q╢  !S"S#S$S.%S&  бDвDгDдD.еDж  ёGЄGєGЇG.їgў  сTтTуTфT.хTц
╤A╥A╙A╘A.╒a╓  AUBUCUDU.EUF  ┴F┬F├F─F.┼F╞  ╤Q╥Q╙Q╘Q.╒q╓  ?S?S?S?S.?S?  БDВDГDДD.ЕDЖ  ёPЄPєPЇP.їpў  СTТTУTФT.хtц
?A?A?A?A.?a?  aVbVcVdV.eVf  !F"F#F$F.%F&  ?Q?Q?Q?Q.?q?  ▒T▓T│T┤T.╡t╢  бEвEгEдE.еEж  ёQЄQєQЇQ.їqў  сUтUуUфU.хUц
┴A┬A├A─A.┼A╞  AVBVCVDV.EVF  ?F?F?F?F.?F?  ┴Q┬Q├Q─Q.┼Q╞  ╤T╥T╙T╘T.╒t╓  БEВEГEДE.ЕEЖ  ёRЄRєRЇR.їrў  СUТUУUФU.хuц
!A"A#A$A.%A&  aWbWcWdW.eWf  ▒G▓G│G┤G.╡g╢  !Q"Q#Q$Q.%Q&  ?T?T?T?T.?t?  бFвFгFдF.еFж  ёSЄSєSЇS.їsў  сVтVуVфV.хVц
?A?A?A?A.?A?  AWBWCWDW.EWF  ╤G╥G╙G╘G.╒g╓  ?Q?Q?Q?Q.?Q?  ┴T┬T├T─T.┼T╞  БFВFГFДF.ЕFЖ  ёTЄTєTЇT.їtў  СVТVУVФV.хvц
aAbAcAdA.eAf  ▒B▓B│B┤B.╡b╢  ?G?G?G?G.?g?  qQrQsQtQ.uqv  !T"T#T$T.%T&  бGвGгGдG.еGж  ёUЄUєUЇU.їuў  сWтWуWфW.хWц
AABACADA.EAF  ╤B╥B╙B╘B.╒b╓  ┴G┬G├G─G.┼G╞  QQRQSQTQ.uqv  ?T?T?T?T.?T?  БGВGГGДG.ЕGЖ  ёVЄVєVЇV.їvў  СWТWУWФW.хwц
aBbBcBdB.eBf  ?B?B?B?B.?b?  !G"G#G$G.%G&  qRrRsRtR.urv  ▒U▓U│U┤U.╡u╢  бPвPгPдP.еPж  ёWЄWєWЇW.їwў  с@т@у@ф@.х@ц
ABBBCBDB.EBF  ┴B┬B├B─B.┼B╞  ?G?G?G?G.?G?  QRRRSRTR.urv  ╤U╥U╙U╘U.╒u╓  БPВPГPДP.ЕPЖ  ё@Є@є@Ї@.ї@ў  С@Т@У@Ф@.х@ц
df -h
/dev/loop0             32M  500K   32M   2% /mnt/tmp

splinter ★★★★★
() автор топика

омг, зачем такие сложности? KISS же, ну :)

dd if=/dev/zero of=/mnt/fat.img bs=1k count=16k
mkdosfs /mnt/fat.img
modprobe g_file_storage file=/mnt/fat.img

копируешь под оффтопиком файлы, безопасно извлекаешь.

rmmod g_file_storage
mkdir -p /mnt/fat
mount /mnt/fat.img /mnt/fat -o loop
ls /mnt/fat
umount /mnt/fat
arsi ★★★★★
()
Ответ на: комментарий от arsi

[root@cpu-unit ~]# modprobe g_file_storage file=fat.img
modprobe: failed to load module g_file_storage: unknown symbol in module, or unknown parameter

splinter ★★★★★
() автор топика
Ответ на: комментарий от arsi

Спасибо Белка, ты супер! modprobe g_file_storage file=/root/fat.img

splinter ★★★★★
() автор топика
Ответ на: комментарий от arsi

блин, при попытке прочитать или скопировать залитый файл получаю:

FAT: Filesystem panic (dev loop1)
    fat_get_cluster: invalid cluster chain (i_pos 1524)
    File system has been set read-only
FAT: Filesystem panic (dev loop1)
    fat_get_cluster: invalid cluster chain (i_pos 1524)
FAT: Filesystem panic (dev loop1)
    fat_get_cluster: invalid cluster chain (i_pos 1524)
FAT: Filesystem panic (dev loop1)
    fat_get_cluster: invalid cluster chain (i_pos 1524)
FAT: Filesystem panic (dev loop1)
    fat_get_cluster: invalid cluster chain (i_pos 1524)
FAT: Filesystem panic (dev loop1)
    fat_get_cluster: invalid cluster chain (i_pos 1524)
FAT: Filesystem panic (dev loop1)

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

ты точно делал «rmmod g_file_storage» перед монтированием образа? и останавливал работу с носителем в оффтопике перед «rmmod g_file_storage»?

arsi ★★★★★
()
Ответ на: комментарий от arsi

да все останавоивал, даже ребутнулся, все равно сыпет такие ошибки. Может ему модуль какой нужен? Вот список модулей которые загружены сейчас:

Module                  Size  Used by    Not tainted
macb                   13448  0
libphy                 18336  1 macb
atmel_usba_udc         13336  1 g_ether
atmel_tsadcc            6648  0
evdev                   8824  1
snd_atmel_ac97c         8104  0
snd_ac97_codec         99444  1 snd_atmel_ac97c
snd_pcm_oss            38160  0
snd_mixer_oss          14540  1 snd_pcm_oss
snd_pcm                65777  3 snd_atmel_ac97c,snd_ac97_codec,snd_pcm_oss
snd_page_alloc          6436  1 snd_pcm
snd_timer              20092  1 snd_pcm
snd                    48836  6 snd_atmel_ac97c,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
ac97_bus                1324  1 snd_ac97_codec
soundcore               5916  1 snd
atmel_lcdfb             6624  1
cfbcopyarea             3036  1 atmel_lcdfb
cfbfillrect             3352  1 atmel_lcdfb
cfbimgblt               2360  1 atmel_lcdfb
fb                     44232  3 atmel_lcdfb
rtc_ds1307              9056  0
rtc_core               15880  1 rtc_ds1307
i2c_gpio                2972  0
i2c_algo_bit            5740  1 i2c_gpio
i2c_core               20816  3 rtc_ds1307,i2c_gpio,i2c_algo_bit
unix                   23708  0
system_loop            18768  0
drecK                   4624  1 system_loop
evrec                   3256  3 system_loop,upg_main,upg_lib
rt_shm                 16392  5 system_loop,upg_main,upg_lib,drecK,evrec
wdtm                    2684  1 system_loop

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

ну что я могу сказать… УМВР:

девайс:

BusyBox v1.18.5 (2011-07-25 09:26:49 EEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

/bin/sh: can't access tty; job control turned off
/ # uname -rm
3.2.2 armv5tejl
/ # mount proc
/ # mount sys
/ # modprobe atmel_usba_udc
[  171.870000] atmel_usba_udc atmel_usba_udc: MMIO registers at 0xfffd4000 mapped at c881e000
[  171.880000] atmel_usba_udc atmel_usba_udc: FIFO at 0x00600000 mapped at c8900000
/ # dd if=/dev/zero of=/mnt/fat.img bs=1k count=16k
16384+0 records in
16384+0 records out
/ # mkdosfs /mnt/fat.img
/ # modprobe g_file_storage file=/mnt/fat.img
[  283.730000] g_file_storage gadget: No serial-number string provided!
[  283.740000] g_file_storage gadget: File-backed Storage Gadget, version: 1 September 2010
[  283.750000] g_file_storage gadget: NOTE: This driver is deprecated.  Consider using g_mass_storage instead.
[  283.760000] g_file_storage gadget: Number of LUNs=1
[  283.760000] g_file_storage gadget-lun0: ro=0, nofua=0, file: /mnt/fat.img
[  284.080000] g_file_storage gadget: high-speed config #1
/ # lsmod
Module                  Size  Used by    Not tainted
g_file_storage         23610  0 
atmel_usba_udc         12693  0 
udc_core                4277  2 g_file_storage,atmel_usba_udc
usb_common               539  2 g_file_storage,udc_core
/ # _

персоналка:

# tail /var/log/messages
Feb  2 15:41:08 darkstar kernel: [24371.350596] usb 1-2: Product: File-backed Storage Gadget
Feb  2 15:41:08 darkstar kernel: [24371.350598] usb 1-2: Manufacturer: Linux 3.2.2 with atmel_usba_udc
Feb  2 15:41:08 darkstar kernel: [24371.356545] usb-storage 1-2:1.0: Quirks match for vid 0525 pid a4a5: 10000
Feb  2 15:41:08 darkstar kernel: [24371.356599] scsi14 : usb-storage 1-2:1.0
Feb  2 15:41:09 darkstar kernel: [24372.358121] scsi 14:0:0:0: Direct-Access     Linux    File-Stor Gadget 0318 PQ: 0 ANSI: 2
Feb  2 15:41:09 darkstar kernel: [24372.358366] sd 14:0:0:0: Attached scsi generic sg6 type 0
Feb  2 15:41:09 darkstar kernel: [24372.361265] sd 14:0:0:0: [sdf] 32768 512-byte logical blocks: (16.7 MB/16.0 MiB)
Feb  2 15:41:09 darkstar kernel: [24372.364528] sd 14:0:0:0: [sdf] Write Protect is off
Feb  2 15:41:09 darkstar kernel: [24372.370965]  sdf:
Feb  2 15:41:09 darkstar kernel: [24372.374028] sd 14:0:0:0: [sdf] Attached SCSI disk
# mount /dev/sdf /mnt/tmp
# echo 'Hello, World!' >/mnt/tmp/hello.txt
# umount /mnt/tmp
# _

девайс:

/ # rmmod g_file_storage
/ # mkdir -p /mnt/fat
/ # mount /mnt/fat.img /mnt/fat
/ # ls /mnt/fat
hello.txt
/ # cat /mnt/fat/hello.txt 
Hello, World!
/ # echo ':)' >>/mnt/fat/hello.txt
/ # umount /mnt/fat
/ # modprobe g_file_storage file=/mnt/fat.img
[  531.300000] g_file_storage gadget: No serial-number string provided!
[  531.310000] g_file_storage gadget: File-backed Storage Gadget, version: 1 September 2010
[  531.320000] g_file_storage gadget: NOTE: This driver is deprecated.  Consider using g_mass_storage instead.
[  531.330000] g_file_storage gadget: Number of LUNs=1
[  531.330000] g_file_storage gadget-lun0: ro=0, nofua=0, file: /mnt/fat.img
[  531.640000] g_file_storage gadget: high-speed config #1
/ # _

персоналка:

# mount /dev/sdf /mnt/tmp
# cat /mnt/tmp/hello.txt
Hello, World!
:)
# _

arsi ★★★★★
()
Ответ на: комментарий от splinter

ок, но завтра, т.к. конфиг на работе (если вдруг забуду, напомни). но обрати внимание на то, что конфиг под наш девайс (который хоть и похож на AT91SAM9RL64-EK, но местами отличается); под ядро 3.2.2 с модифицированным патчем at91 (оригинальный был под 2.6.38).

хотя там вообще ничего хитрого нету, просто включен g_file_storage как модуль…

arsi ★★★★★
()
Ответ на: комментарий от arsi

все равно скинь, может я где опцию смахнул или недоглядел или может в кодировках проблема, кстати у тебя mount от busybox или нормальный?

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

> кстати у тебя mount от busybox или нормальный?

от базибокс. там в какой-то версии (1.15 или где-то рядом) он тоже научился определять, что монтируется не блочный девайс, а файл, и автоматически заворачивать его через loop (только ему для этого смонтированный /proc нужен).

система вообще состоит только из ядра и статически собранного базибокса (который только для отладки и нужен, монтировать фс и подгружать/выгружать модули может основной бинарник); всё собирается сорцери г++; билдруты не используются.

arsi ★★★★★
()
Ответ на: комментарий от arsi

версию busybox'a тоже посмотри завтра. Может у меня некрофильная, попробую завтра собрать нормальный mount, не busybox'овский.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

> версию busybox'a тоже посмотри завтра.

да я её и сейчас посмотреть могу ;)

BusyBox v1.18.5 (2011-07-25 09:26:49 EEST) built-in shell (ash)

> попробую завтра собрать нормальный mount, не busybox'овский.

зачем собирать? возьми с armedslack, на атмеле их бинарники работают отлично. да и не в маунте проблема, скорее всего…

arsi ★★★★★
()
Ответ на: комментарий от arsi

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

splinter ★★★★★
() автор топика
Ответ на: комментарий от arsi

отстранненый вопрос:

mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw
Почему не через rootfs.cpio в ядро? это же проще чем initrd.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

не обращай внимания, это осталось с дефолтного конфига, никому не мешает, вот его никто и не трогает :) параметры через убут передаются: «bootargs=console=ttyS0,115200 root=/dev/mtdblock0 mtdparts=atmel_nand:-(root) rw rootfstype=jffs2».

arsi ★★★★★
()
Ответ на: комментарий от splinter

и да, убут и ядро в датафлеш, который на 2 (или 4?) метра, с нормальным инитрамфс уже не влезает, так что рутфс на нанде.

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.