GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
WebコンパイラでビルドしたプログラムをWindowsから書き込むと正常に動作しますが、同じプログラムをLinuxから書き込もうとすると正しく書き込めないようで書き込んだプログラムが動きません。
どなたか、正常に書き込めているよ、という方、いらっしゃいますでしょうか?
私の環境の問題なのか切り分けをしたいと思います。
私は、elementary os (ubuntu 16.04ベース)を使っています。
dmesgで見てみると、エラー?と思われるメッセージがでていることが気になっています。
[ 450.317523] usb 1-2: new full-speed USB device number 15 using xhci_hcd[ 450.466552] usb 1-2: New USB device found, idVendor=0000, idProduct=0008[ 450.466554] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=6[ 450.466556] usb 1-2: Product: USB Mass Storage[ 450.466557] usb 1-2: Manufacturer: RENESAS[ 450.466559] usb 1-2: SerialNumber: 0000000000001[ 450.467925] usb-storage 1-2:1.0: USB Mass Storage device detected[ 450.468218] scsi host3: usb-storage 1-2:1.0[ 451.494576] scsi 3:0:0:0: Direct-Access Renesas Mass Storage 1.00 PQ: 0 ANSI: 0 CCS[ 451.495429] sd 3:0:0:0: Attached scsi generic sg1 type 0[ 451.495828] sd 3:0:0:0: [sdb] 1920 512-byte logical blocks: (983 kB/960 KiB)[ 451.496105] sd 3:0:0:0: [sdb] Write Protect is off[ 451.496110] sd 3:0:0:0: [sdb] Mode Sense: 00 24 00 00[ 451.496403] sd 3:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA[ 451.502153] sdb: sdb1[ 451.502156] sdb: p1 size 1989 extends beyond EOD, enabling native capacity[ 451.507043] sdb: sdb1[ 451.507051] sdb: p1 size 1989 extends beyond EOD, truncated[ 451.508662] sd 3:0:0:0: [sdb] Attached SCSI removable disk
なお、同じ環境で、GR-CITRUSの場合は正常に書き込めます。dmesgで見ると以下の通りです。
[ 337.625656] usb 1-2: new full-speed USB device number 13 using xhci_hcd[ 337.776101] usb 1-2: New USB device found, idVendor=0000, idProduct=0000[ 337.776109] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=6[ 337.776113] usb 1-2: Product: USB Mass Storage[ 337.776118] usb 1-2: Manufacturer: RENESAS SOLUTIONS CORP.[ 337.776122] usb 1-2: SerialNumber: 0000000000001[ 337.777403] usb-storage 1-2:1.0: USB Mass Storage device detected[ 337.777994] scsi host3: usb-storage 1-2:1.0[ 338.787068] scsi 3:0:0:0: Direct-Access Renesas Mass Storage 1.00 PQ: 0 ANSI: 2[ 338.788019] sd 3:0:0:0: Attached scsi generic sg1 type 0[ 338.788434] sd 3:0:0:0: [sdb] 1990 512-byte logical blocks: (1.02 MB/995 KiB)[ 338.788900] sd 3:0:0:0: [sdb] Write Protect is off[ 338.788906] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00[ 338.789340] sd 3:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA[ 338.797231] sdb: sdb1[ 338.799965] sd 3:0:0:0: [sdb] Attached SCSI removable disk
自分もダメでした。
CentOSでもメッセージは同じです。
ちょっと見てみただけなので、間違っているかもしれませんが...
カーネルソースと上の dmesg の出力を見る限り、使用された USB メモリは、総容量 1990 block (1 block = 512 byte)、パーティション分割のために、マスタブートレコードで 1 block 使用していて、sdb1 パーティションの容量は、残りの1989 block となる。また、何らの理由(フラッシュメモリのページ/ブロックサイズ、フラグメンテーション回避、ドライバのスループット、等々(?)) により、この sdb1 パーティションへの書込みの際の領域割り当てには、block(= 512 byte) や FAT の cluster(= 4 ~ 64 kbyte) 以外に、128 block(= 64 kbyte) という単位(仮に chunk と呼ぶ)も考慮され、1689 block は、 1989 block = ( 15 × 128 block )+ 69 blockのように分割されて、chunk 部分が優先して使用される。最後の端数部分 69 block も無駄になる訳ではなく、最後の chunk と結合して使用したり、chunk 部分に空きが無くなった場合の非常時に使用したりされる。この際、 [ 451.502156] sdb: p1 size 1989 extends beyond EOD, enabling native capacityが出力される。ただ、この端数部分を利用する際の処理に不具合があり、 [ 451.507051] sdb: p1 size 1989 extends beyond EOD, truncatedを出力して、-ENOSPC を返してしまうことがある... ように見えます。回避は、この端数部分を利用する処理が呼ばれないようにすれば良いので、(1) sdb1 パーティションのサイズを 1920 block など、128 block の倍数にする(2) sdb1 パーティションの開始を 128 block でアラインする。で大丈夫ではないか... と思います。なお、(1) は、必須ですが、(2) は、不要かもしれません(128 block の理由が分からないので)。
エラーが出る/出ないの違いは、chunk のサイズの違いか、不具合の有無、に起因している... かな?