Hatena::ブログ(Diary)

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)
chromeで見ると、死ぬほど出るGoogleの広告がブロックできないので、
firefoxでABPを入れるとすっきり見られます。

2012-07-12

作業用miniroot作成 -1-

ターゲットは、arm-v7a-neon。

ほんとは、multistrapでarmhfでやりたかったのだけど、時間がなかったのでarmelでdebootstrapで妥協した。

いかんいかん、勉強の機会を逸した。

debootstrapはえらく久しぶりだったので、とりあえず、後のために履歴を残す。


要求はmkfs.ext3, mkfs.vfat, fdisk, dd, tarが入っていればいいということ。

要するに内蔵eMMCの書き換え専用イメージのベースがほしいわけ。

単独起動したらいいので、細かい設定は抜きで。

ターゲットには、どのみち無線LANしかないので、ネットワーク接続可能になることは期待薄。


debootstrapする

kinneko@BuildSV:~/ARMinimal$ mkdir armel
kinneko@BuildSV:~/ARMinimal$ cd armel/
kinneko@BuildSV:~/ARMinimal/armel$ sudo apt-get install debootstrap
kinneko@BuildSV:~/ARMinimal/armel$ sudo debootstrap --arch armel squeeze ./ http://ftp.debian.org/debian
(snip)
W: Failure trying to run: chroot /home/kinneko/ARMinimal/armel/. mount -t proc proc /proc

あ、foreignオプション忘れた。

ついでにminbaseも追加。

kinneko@BuildSV:~/ARMinimal/armel$ sudo debootstrap --arch armel --variant=minbase --foreign squeeze ./ http://ftp.debian.org/debian
(snip)
I: Extracting zlib1g...
kinneko@BuildSV:~/ARMinimal/armel$ ls
bin   debootstrap  etc   lib  proc  sbin     sys  usr
boot  dev          home  mnt  root  selinux  tmp  var

できあがり。

アーカイブする。

kinneko@BuildSV:~/ARMinimal/armel$ sudo tar zcvfp ../root-armel.tgz ./
kinneko@BuildSV:~/ARMinimal/armel$ cd ..
kinneko@BuildSV:~/ARMinimal$ ls -l root-armel.tgz 
-rw-r--r-- 1 root root 82946901 Jul 12 23:39 root-armel.tgz

80MBくらい。

でかい...

まぁ、起動容量に余裕があるから、小さくする労力をかける必要はないな。


実機にてdebootstrapのセカンドステージを実行

次に、実機でセカンドステージる。

最近は、qemuのライブラリ使ったり、Multiarchライブラリ使ったりで、セカンドステージもクロスでできるらしいが、それも試している余裕がない。

SDを用意して書き込み。

SDを4パーティションに分け、フォーマット。

  • uboot vfat bootable
  • uboot pram 256K
  • Android ext3
  • Linux ext3

中身をそれぞれに展開。

kinneko@BuildSV:~/ARMinimal$ sudo mount /dev/sdb4 /media
kinneko@BuildSV:~/ARMinimal$ cd /media/
kinneko@BuildSV:/media$ sudo tar xvfp ~/ARMinimal/root-armel.tgz 
kinneko@BuildSV:/media$ cd ~/ARMinimal/
kinneko@BuildSV:~/ARMinimal$ sudo umount /media
kinneko@BuildSV:~/ARMinimal$ sudo mount /dev/sdb3 /media
kinneko@BuildSV:/media$ sudo tar xvf ~/TARGET/buildtest/work/outobj/android-fs_shurink_neon.tar.gz
kinneko@BuildSV:/media$ cd ~/ARMinimal/
kinneko@BuildSV:~/ARMinimal$ sudo umount /media
kinneko@BuildSV:~/ARMinimal$ sudo mount /dev/sdb1 /media
kinneko@BuildSV:~/ARMinimal$ sudo cp ~/TARGET/buildtest/work/outobj/*.bin /media/
kinneko@BuildSV:~/ARMinimal$ sudo cp ~/TARGET/buildtest/work/outobj/uImage.neon /media/uImage
kinneko@BuildSV:~/ARMinimal$ sudo umount /media

ターゲットにSDを入れてシリアル接続してubootから適当に起動。

kinneko@BuildSV:~/ARMinimal$ sudo minicom -8 -D /dev/ttyUSB1
Booted Device: SD
DRAM:  256 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
U-BOOT # setenv bootargs root=/dev/mmcblk1p4 noinitrd init=/bin/sh console=ttyS0,115200n8n SELINUX_INIT=no mem=180M@1024M rw video=qfb: ip=none rootfstype=ext3 rootwait;bootm 40007fc0
(snip)
VFS: Mounted root (ext3 filesystem) on device 179:12. 
Freeing init memory: 116K
/bin/sh: can't access tty; job control turned off
#

来た。

セカンドステージを実行。

# /debootstrap/debootstrap --second-stage
I: Installing core packages...
(snip)
I: Base system installed successfully.

完成。

この状態で、mkfs.ext3, fdisk, dd, tarあり。

mkfs.vfatだけ不足。

これは後から考える。


eMMCへのアクセスを確認

起動ログでは、内蔵eMMCとSDCardは認識している。

mmc0: new high speed MMC card at address 0001
mmcblk0: mmc0:0001 M4G1FA 3.72 GiB
 mmcblk0: p1 p2 p3 p4
mmc1: new high speed SD card at address 8dc5
mmcblk1: mmc1:8dc5 SD02G 1.83 GiB
 mmcblk1: p1 p2 p3 p4        

kernelのビルドオプションでeMMCアクセスに必要なモジュールが組み込まれているか調べる。

# mount -t proc proc /proc
# zcat /proc/config.gz |grep CONFIG_MMC
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
CONFIG_MMC_EMBEDDED_SDIO=y
# CONFIG_MMC_PARANOID_SD_INIT is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_BLOCK_BOUNCE is not set
# CONFIG_MMC_BLOCK_DEFERRED_RESUME is not set
# CONFIG_MMC_TEST is not set
# CONFIG_MMC_SDHCI is not set

MMC_SDHCIってなくてもよかったんだっけ?

sdhci: Secure Digital Host Controller Interface driver

今回の用途では、なくても問題なさそう。


内蔵eMMCにアクセスするには、デバイスファイルが必要。

作っておく。

たしか、ubootは8パーティションまでしか見られないのだったかな。

一応、8つまで作っておく。

# mknod /dev/mmcblk0 b 179 0
# mknod /dev/mmcblk0p1 b 179 1
# mknod /dev/mmcblk0p2 b 179 2
# mknod /dev/mmcblk0p3 b 179 3
# mknod /dev/mmcblk0p4 b 179 4
# mknod /dev/mmcblk0p5 b 179 5
# mknod /dev/mmcblk0p6 b 179 6
# mknod /dev/mmcblk0p7 b 179 7
# mknod /dev/mmcblk0p8 b 179 8

ddで、ダンプできることを確認しておく。

できたできた。


掃除

インストールに使ったdebパッケージを掃除。

# apt-get clean                                                                                               

80MBくらいあったのは、40MB強に小さくなっている。



mkfs.vfatの追加

mkfs.vfatを入れたい。

ネットないので、SDだけ外して、パッケージファイルを取得しておく。

kinneko@BuildSV:/media$ sudo wget http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_3.0.9-1_armel.deb

SDをターゲットに挿して起動。

# dpkg -i dosfstools_3.0.9-1_armel.deb                                                                        
dpkg: error: PATH is not set.  

うぐぐ。

# export PATH=$PATH:/usr/local/sbin/
# export PATH=$PATH:/usr/sbin/
# export PATH=$PATH:/sbin
# dpkg -i dosfstools_3.0.9-1_armel.deb                                                                        
Selecting previously deselected package dosfstools.                                                           
(Reading database ... 6140 files and directories currently installed.)                                        
Unpacking dosfstools (from dosfstools_3.0.9-1_armel.deb) ...                                                  
Setting up dosfstools (3.0.9-1) ... 
# mkfs.vfat                                                                                                   
mkfs.vfat 3.0.9 (31 Jan 2010)                                                                                 
No device specified!                                                                                          
Usage: mkdosfs [-a][-A][-c][-C][-v][-I][-l bad-block-file][-b backup-boot-sector]                             
       [-m boot-msg-file][-n volume-name][-i volume-id]                                                       
       [-s sectors-per-cluster][-S logical-sector-size][-f number-of-FATs]                                    
       [-h hidden-sectors][-F fat-size][-r root-dir-entries][-R reserved-sectors]                             
       /dev/name [blocks] 
# rm dosfstools_3.0.9-1_armel.deb                                                                             
# apt-get clean
# sync

アーカイブ作成

あとは、アーカイブ作って終わり。

kinneko@BuildSV:/media$ sudo tar zcvfp ~/ARMinimal/rootfs-armel.tgz ./
kinneko@BuildSV:/media$ ~/ARMinimal
kinneko@BuildSV:~/ARMinimal$ ls -lh rootfs-armel.tgz
-rw-r--r--  1 root    root     39M Jul 13 02:07 rootfs-armel.tgz

しかしデカいな。

ふつうは、このあと、ネットワーク設定したり、fstab書いたり、シリアルコンソールまともにしたり、エディタ入れたり、hostnameつけたり、apt-get update/upgradeしたり、そういう作業もする。

今回は必要ないのと、ネットワークないのでパス。

RTCないので、時計ないときは、こんなことも。

echo HWCLOCKACCESS=no >> /etc/default/rcS

buildrootで作ったものとかはさらに小さいけど、パッケージ管理が生きていないので、いろいろと追加していくのは自前ビルドになって、結構メンテナンスがしんどい。

debootstrapだと、違うアーキテクチャでも簡単に作れて便利だ。

しかし、久しぶりにやったら、思ったより時間かかってしまつた。

1時間くらいでできると思ったのだけど(^^;。

耄碌したわい...

作業用miniroot作成 -2-

なんか、普通にシェル環境が使えたほうがいいとのリクエストがある。

あと、プリセットのuboot scriptで起動したほうが楽。

ついでに、いくつかカスタム。


そういえば、こんな技もあったな。

http://d.hatena.ne.jp/kinneko/20070126/p2

パスワード空のユーザーを作り、inittabで

1:2345:respawn:/bin/login username

としておくと、gettyを飛ばして動作できる。もちろんジョブコントロールも可能。

デバイスを直接さわる作業用なので、rootアカウントをパスワードなしにしておく。

kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/passwd
root::0:0:root:/root:/bin/bash
kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/shadow
root::15533:0:99999:7:::
kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/inittab 
#1:2345:respawn:/sbin/getty 38400 tty1
1:2345:respawn:/bin/login root

起動してみる。

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent               
permitted by applicable law.                                                    
-bash: no job control in this shell                                             
root@BuildSV:~# 

うまくきた。


ホスト名はminirootがいいな。

作成環境のを引きずるみたい。

kinneko@BuildSV:~$ sudo vi /media/etc/hostname 
miniroot

inittabで他が生きているので、これも定期的に出る。

これもキモチわるい。

INIT: Id "3" respawning too fast: disabled for 5 minutes

INIT: Id "5" respawning too fast: disabled for 5 minutes

INIT: Id "4" respawning too fast: disabled for 5 minutes

INIT: Id "6" respawning too fast: disabled for 5 minutes

INIT: Id "2" respawning too fast: disabled for 5 minutes

kinneko@BuildSV:~$ sudo vi /media/etc/inittab  
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

止める。


内部eMMCだけでなく、SDCardにもアクセスしたいとリクエスト。

Android環境を見てみる。

brw------- root     root     179,  12 2012-07-12 11:15 mmcblk1p4
brw------- root     root     179,  11 2012-07-12 11:15 mmcblk1p3
brw------- root     root     179,  10 2012-07-12 11:15 mmcblk1p2
brw------- root     root     179,   9 2012-07-12 11:15 mmcblk1p1
brw------- root     root     179,   8 2012-07-12 11:15 mmcblk1
brw------- root     root     179,   4 2012-07-12 11:15 mmcblk0p4
brw------- root     root     179,   3 2012-07-12 11:15 mmcblk0p3
brw------- root     root     179,   2 2012-07-12 11:15 mmcblk0p2
brw------- root     root     179,   1 2012-07-12 11:15 mmcblk0p1
brw------- root     root     179,   0 2012-07-12 11:15 mmcblk0

あれ?

7つまでなのか。

root@miniroot:~# ls -l /dev/mmc*                                                
brw-r--r-- 1 root root 179, 0 Jul 12 06:37 /dev/mmcblk0
brw-r--r-- 1 root root 179, 1 Jul 12 06:37 /dev/mmcblk0p1
brw-r--r-- 1 root root 179, 2 Jul 12 06:38 /dev/mmcblk0p2
brw-r--r-- 1 root root 179, 3 Jul 12 06:38 /dev/mmcblk0p3
brw-r--r-- 1 root root 179, 4 Jul 12 06:38 /dev/mmcblk0p4
brw-r--r-- 1 root root 179, 5 Jul 12 06:38 /dev/mmcblk0p5
brw-r--r-- 1 root root 179, 6 Jul 12 06:38 /dev/mmcblk0p6
brw-r--r-- 1 root root 179, 7 Jul 12 06:38 /dev/mmcblk0p7
brw-r--r-- 1 root root 179, 8 Jul 12 06:39 /dev/mmcblk0p8
root@miniroot:~# rm -rf /dev/mmcblk0p8
root@miniroot:~# mknod /dev/mmcblk1 b 179 8
root@miniroot:~# mknod /dev/mmcblk1p1 b 179 9
root@miniroot:~# mknod /dev/mmcblk1p2 b 179 10
root@miniroot:~# mknod /dev/mmcblk1p3 b 179 11
root@miniroot:~# mknod /dev/mmcblk1p4 b 179 12
root@miniroot:~# mknod /dev/mmcblk1p5 b 179 13
root@miniroot:~# mknod /dev/mmcblk1p6 b 179 14
root@miniroot:~# mknod /dev/mmcblk1p7 b 179 15
root@miniroot:~# mknod /dev/mmcblk1p8 b 179 16
root@miniroot:~# ls -l /dev/mmc*                                                
brw-r--r-- 1 root root 179,  0 Jul 12 06:37 /dev/mmcblk0
brw-r--r-- 1 root root 179,  1 Jul 12 06:37 /dev/mmcblk0p1
brw-r--r-- 1 root root 179,  2 Jul 12 06:38 /dev/mmcblk0p2
brw-r--r-- 1 root root 179,  3 Jul 12 06:38 /dev/mmcblk0p3
brw-r--r-- 1 root root 179,  4 Jul 12 06:38 /dev/mmcblk0p4
brw-r--r-- 1 root root 179,  5 Jul 12 06:38 /dev/mmcblk0p5
brw-r--r-- 1 root root 179,  6 Jul 12 06:38 /dev/mmcblk0p6
brw-r--r-- 1 root root 179,  7 Jul 12 06:38 /dev/mmcblk0p7
brw-r--r-- 1 root root 179,  8 Jul 12 11:25 /dev/mmcblk1
brw-r--r-- 1 root root 179,  9 Jul 12 11:25 /dev/mmcblk1p1
brw-r--r-- 1 root root 179, 10 Jul 12 11:25 /dev/mmcblk1p2
brw-r--r-- 1 root root 179, 11 Jul 12 11:25 /dev/mmcblk1p3
brw-r--r-- 1 root root 179, 12 Jul 12 11:25 /dev/mmcblk1p4
brw-r--r-- 1 root root 179, 13 Jul 12 11:25 /dev/mmcblk1p5
brw-r--r-- 1 root root 179, 14 Jul 12 11:25 /dev/mmcblk1p6
brw-r--r-- 1 root root 179, 15 Jul 12 11:25 /dev/mmcblk1p7
brw-r--r-- 1 root root 179, 16 Jul 12 11:25 /dev/mmcblk1p8

ddできることを確認。


"-bash: no job control in this shell"が出るのも美しくない。

美しくないばかりか、コマンドを途中で殺せないので不便。

http://d.hatena.ne.jp/kinneko/20081029/p7

/dev/consoleを引き継いでいる以上は無理か。

この対策にはいくつか例がある。

原始的な方法だとこんなの。

1:2345:respawn:/bin/login -f root </dev/ttyS0 >/dev/ttyS0 2>&1

何も道具がいらない。

gettyで外部プログラムを起動する方法。

cで書くのと、シェルスクリプトの2つ。

T0:23:respawn:/sbin/getty -l /usr/local/bin/autologin -n -L ttyS0 115200 vt102

autologin.cの例。

#include <unistd.h>

int main(void) {
   execlp("login", "login", "-f", "USERNAME", NULL);
}

cc autologin.c -o autologinと普通にコンパイル。

シェルスクリプトの例。

vi /usr/local/bin/autologin
#!/bin/sh
exec /bin/login -f root

最後はsuloginを使う方法。

T0:23:respawn:/sbin/getty -l /sbin/sulogin -n -L ttyS0 115200 vt102

getty外部プログラムとシェルスクリプトの組み合わせを採用。

kinneko@BuildSV:~$ sudo vi /media/usr/local/bin/autologin
kinneko@BuildSV:~$ sudo chmod +x /media/usr/local/bin/autologin
kinneko@BuildSV:~$ sudo vi /media/etc/inittab 
T0:23:respawn:/sbin/getty -l /usr/local/bin/autologin -n -L ttyS0 115200 vt102

ダメだ...

autologin単体では動くのだけどな。

原始的な方法を試してみる。

/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
INIT: Id "1" respawning too fast: disabled for 5 minutes                        
INIT: no more processes left in this runlevel 

あらま。

root@miniroot:~# mknod /dev/ttyS0 c 4 64                                        
root@miniroot:~# ls -l /dev/ttyS0                                               
crw-r--r-- 1 root root 4, 64 Jul 12 11:39 /dev/ttyS0

うまくいった。

「電力網の再発明」を狙う、少壮の天才女性科学者:ダニエル・フォン

http://wired.jp/2012/07/05/danielle-fong/

ダニエルがみつけた問題解決の鍵は水の追加──つまり、密度の高い霧状の水分を圧縮空気のタンク内にスプレーするというやり方で、これなら空気の圧縮中に発生する熱が水分に吸収される。この水分は、空気(気体)にくらべてはるかに効率よく熱を保存することができる。さらに、この霧状の水分のおかげでライトセイルのプロトタイプでは、エネルギーの保存や回収が従来の装置に比べてずっと容易にできるという。

Windows 8はWindows 7にもUSBスティックで丸ごと運べる

http://www.gizmodo.jp/2012/07/windows_8windows_7usb.html

10月発売のWindows 8には、フラッシュドライブで自分の環境を丸ごと持ち出して、出先のどんなPCでも自分のPCに変えられる魅力の新機能「Windows to Go」がついてます。

例えば自分のOS設定、インストール済みソフト、おそらくファイルも全部USBメモリーに吸い上げて帰り、それを家のWindowsマシンに差し込めば自分の職場のシステムと全く同じ環境で使えるんですね

GALAXY S3が中国に完全コピーされる しかも動作がサクサクw

http://ggsoku.com/2012/07/galaxy-s3-copy-cn/

独自のブランドを確立するより、模倣によってそのブランドに乗っかるほうがビジネスは容易。

シャープ、シンプルモデルの「AQUOS H7」シリーズに40V型を追加

http://japan.cnet.com/digital/av/35019089/

 本体にはベル音を内蔵し目覚まし時計として利用することも可能。「明るさセンサー」や「照明オフ連動機能」、「無信号電源オフ」「無操作電源オフ」などを搭載し、テレビ側が自動で節電する機能も備える。

妙なところは健在。

Microsoft、「Windows Server 2012」のエディションを発表

http://www.itmedia.co.jp/news/articles/1207/06/news038.html

高速で無駄のないソフトウェア開発を実現するための7つのポイント

http://kuranuki.sonicgarden.jp/2012/03/post-70.html

[][] CyanogenMod はCM10でAndroid 4.1 Jelly Bean導入、リリースは「できたとき」

http://japanese.engadget.com/2012/07/05/cyanogenmod-cm10-android-4-1-jelly-bean/

ユーザのアプリの使い方をビデオで記録してUI等を改善できるサービスDelight.io

http://jp.techcrunch.com/archives/20120705delight-io/