メモ」タグアーカイブ

JpegopitmをMinGWでコンパイルその2

Jpegoptim.cの変更なんだけど下記の変更のほうが修正個所が1か所にまとまるしいいかも。

@@ -53,6 +53,39 @@
 #define ICC_IDENT_STRING  "ICC_PROFILE\0"
 #define ICC_IDENT_STRING_SIZE 12

+#ifdef WIN32
+#define uid_t   int
+#define gid_t   int
+#define ROOT_UID	0
+#define ROOT_GID	0
+#define realpath(N,R) _fullpath((R),(N),_MAX_PATH)
+uid_t getuid(void)
+{
+	return ROOT_UID;
+}
+uid_t geteuid(void)
+{
+	return ROOT_UID;
+}
+gid_t getgid(void)
+{
+	return ROOT_GID;
+}
+gid_t getegid(void)
+{
+	return ROOT_GID;
+}
+int setuid(uid_t uid)
+{
+	return (uid == ROOT_UID ? 0 : -1);
+}
+int setgid(gid_t gid)
+{
+	return (gid == ROOT_GID ? 0 : -1);
+}
+
+#endif
+
 void fatal(const char *msg);

 struct my_error_mgr {

JpegopitmをMinGWでコンパイル

Jpegoptimのコンパイルにちょっと躓いたのでメモ。

  1. msys/src/配下にjpegoptim-1.2.3を解凍して配置
  2. msysを起動して、下記のコマンドを入力
    $ cd /src/jpegoptim-1.2.3/
    $ autoconf
    $ configure
    
  3. configureが通らず、下記のエラーが出る
    configure: error: cannot find install-sh, install.sh, or shtool in aux "."/aux
    
  4. configure.inを下記のように修正する
    @@ -3,7 +3,7 @@
     dnl Process this file with autoconf to produce a configure script.
     AC_INIT(jpegoptim.c)
     AC_CONFIG_HEADER(config.h)
    -AC_CONFIG_AUX_DIR(aux)
    +AC_CONFIG_AUX_DIR(sub)
    
     AC_CANONICAL_HOST
    
  5. subフォルダを作成し、install-sh等を適当な場所から持ってくる(例ではJpeglibから)
    $ mkdir sub
    $ cp ../jpeg-6bx/install-sh ../jpeg-6bx/config.sub ../jpeg-6bx/config.guess ./sub
    
  6. 再度、configureファイルを生成して、configureを実行
    $ autoconf
    $ configure
    
  7. configureが通ったら、makeを実行する。すると下記のエラーが出る
    jpegoptim.c:354: undefined reference to 'realpath'
    jpegoptim.c:354: undefined reference to 'realpath'
    
  8. jpegoptim.cを下記のように修正する
    @@ -351,7 +351,11 @@
           }
           break;
         case 'd':
    -      if (realpath(optarg,dest_path)==NULL || !is_directory(dest_path)) {
    +#ifdef WIN32
    +	if (_fullpath(dest_path,optarg,MAXPATHLEN)==NULL || !is_directory(dest_path)) {
    +#else
    +	if (realpath(optarg,dest_path)==NULL || !is_directory(dest_path)) {
    +#endif
     	fatal("invalid argument for option -d, --dest");
           }
           if (verbose_mode)
    @@ -441,8 +445,13 @@
     	 fatal("splitdir() failed!");
            strncpy(newname,argv[i],sizeof(newname));
          }
    -     snprintf(tmpfilename,sizeof(tmpfilename),
    +#ifdef WIN32
    +	 snprintf(tmpfilename,sizeof(tmpfilename),
    +	      "%sjpegoptim-%d.tmp", tmpdir, (int)getpid());
    +#else
    +	 snprintf(tmpfilename,sizeof(tmpfilename),
     	      "%sjpegoptim-%d-%d.tmp", tmpdir, (int)getuid(), (int)getpid());
    +#endif
        }
    
       retry_point:
    
  9. 再度、makeでコンパイルが通った。

auxというのはBSD系の名残でinstall-shなどの補助スクリプトが各のされているフォルダなのだが、
WindowsではauxというフォルダはDOSの特殊フォルダの名残で作成できない。
そこで、参照先を”sub”に変更し、新たに”sub”フォルダを作成し、GNU系ソフトに同梱されている補助スクリプト類を格納した。
また、コンパイル時にエラーになったrealpathやgetuidはPOSIX系の関数で
Windowsには存在しないため同様の動作するものに置き換えたり削除したりしている。
今回の例ではコンパイルを通すためにrealpathを_fullpathに置き換えたけれどもっときれいに書き直した方がいいな

QEMUのコンパイル

QEMUの最新版がほしかったので自分でコンパイルしてみたときのメモ。

  • コンパイル環境構築
    • MinGW+MSYS+zlib
      1. 猫科研究パック(msys_felidlabo_a007.7z)をダウンロード
      2. msys_felidlabo_a007.7zを解凍し、作成されたmsysフォルダをc:/などマルチバイト文字およびスペースを含まないパスに格納(例:”c:/msys”)
      3. msys/_felidlabo/04_gccinstall.batを実行し、GCCをインストール
    • coreutils-ext
      1. coreutils-5.97-3-msys-1.0.13-ext.tar.lzmaをダウンロード
      2. coreutils-5.97-3-msys-1.0.13-ext.tar.lzmaを解凍し、binの中をmsys/bin/にコピー(pr.exeは上書きでよい)
        ※.tar.lzmaの解凍方法がわからない場合は、7-Zipを使用する
        ※coreutils-extを入れないとQEMUのmakeで下記のエラーとなる

        /pc-bios/optionrom/signrom.sh: line 31: * 512 - 1 
        : syntax error: operand expected (error token is "* 512 - 1 ")
        make[1]: *** [multiboot.bin] Error 1
        rm multiboot.o multiboot.raw multiboot.img
        make: *** [romsubdir-optionrom] Error 2
    • SDL
      1. SDL-1.2.14.zipをダウンロード
      2. SDL-1.2.14.zipを解凍し、SDL-1.2.14フォルダをmsys/src/へ移動
      3. msys/msys.batを起動し、下記のコマンドでSDLをコンパイル
        /src/SDL-1.2.14/configure --prefix=/mingw --disable-shared
        make
        make install
  • コンパイル
    1. qemu-0.12.4.tar.gzをダウンロード
    2. qemu-0.12.4.tar.gzを解凍し、qemu-0.12.4フォルダをmsys/へ移動
    3. msys/msys.batを起動し、下記のコマンドでQEMUをコンパイル
      mkdir /home/***/QEMU
      /qemu-0.12.4/configure --prefix=/home/***/QEMU --target-list=i386-softmmu
      make
      make install
    4. /msys/home/***/QEMU/にコンパイルされた実行ファイル等が格納されている

英語の勉強に役立つサイトまとめ

まだ全部試せたわけじゃないけれど、基本的に無料で集めたつもり。

個人学習

コミュニティ

いいサイトや、使ってみた感想などありましたらここを参照した方へのアドバイスになりますので
コメントに書いていただけると助かります。

Ubuntu 10.04 でカーネル再構築

Ubuntu上でInfernoのカーネルをコンパイルするときに、

  1. /bin/sh: Argument list too long

というエラーでmkが完了しなかった。
xargsで分割できればいいんだけど、いまいち使い方がわからない。
というのもmkコマンドでmkfileを使うんだけど、その中身で
どうも、別ファイルを読み込んでその中をまた別のファイルに書かれてるスクリプトで
分割して、それを引数で渡してるみたいなんだけど、この場合どうやってxargsを使えばいいんだ?

仕方ないのでARG_MAX自体の値を増やすことにした。

カーネル再構築に必要なパッケージのインストール

  1. $sudo apt-get install build-essential
  2. $sudo apt-get install kernel-package libncurses5-dev libqt3-mt-dev

カーネルソースをインストールして展開

  1. $sudo apt-get install linux-source-2.6.32
  2. $cd /usr/src
  3. $sudo tar xvjf linux-source-2.6.32.tar.bz2

ソースの変更

  1. /usr/src/linux-source-2.6.32/include/linux/limits.hを開き、ARG_MAXを増やす

.config ファイルの作成

  1. $cd linux-source-2.6.32
  2. $sudo cp /boot/config-2.6.32-23-generic .config
  3. $sudo make oldconfig

パラメータの変更

  1. $sudo make menuconfig

Processor type and features ---> Processor familly ---> *Coer 2/newer Xeon
Timer frequency ---> *300 HZ
Device Drivers ---> ATA/ATAPI/MFM/RLL support ---> *generic ATA/ATAPI disk support
Device Drivers ---> ATA/ATAPI/MFM/RLL support ---> *ATA disk support

などを変更してSave Configuration to an Alternate Fileで変更を保存。
出来上がった .config ファイルの中を開いて、
以下のものが「M」ではなく「y」になっているか確認する。

  • CONFIG_IDE
  • CONFIG_SCSI
  • CONFIG_EXT3

並列コンパイル設定(CPUは4つなので最大5つまでという設定にする)

  1. $sudo export CONCURRENCY_LEVEL=5

カーネルリビルド

  1. $sudo make-kpkg clean
  2. $sudo make-kpkg –initrd –revision=20100710 kernel_image kernel_headers

.debができるのでdpkgでインストール

  1. $cd ../
  2. $sudo dpkg -i linux-image-2.6.32.*****20100710_i386.deb
  3. $sudo dpkg -i linux-headers-2.6.32.*****20100710_i386.deb

再起動

  1. $sudo shutdown -r now

起動しない・・・

Kernel Panic:VFS:***

というエラー、とりあえず、再起動後Shiftキーを押しっぱなしにしてGRUB2のメニュー入って、
正常に動いていたバージョンの起動設定と見比べてみるとinitrdの項が無いのが問題っぽい。
initrd作成

  1. $cd /boot/
  2. $sudo mkinitramfs -o initrd.img-2.6.32.***** 2.6.32

再起動後Shiftキーを押しっぱなしにして再度GRUB2のメニュー入って、
再構築したカーネルの項で”e”を押下で編集モードに入り末尾に

initrd /boot/initrd.img-2.6.32.*****

を追加して、Ctrl+xでなんとか起動できたっぽい。
GRUB2の変更は手動でやらないとだめなのかなぁ・・・。
そして、目的のARG_MAXの値を確認
$getconf ARG_MAX
で確認してみるも変わらない・・・。
カーネルが新しいのでもしかしてと重い
$sudo ulimit -Ss
を実行したところ、増えた。
結局、カーネルコンパイルしなくてよかったみたいなので、
今回作ったカーネルを削除して、今まで使ってたカーネルを利用。

増やしても、infernoのカーネルコンパイルエラーは発生する。
どうも作業してる方向がすでに間違っているようなので別の方法を探してみる。

日本語と英語の翻訳エンジンまとめ

翻訳エンジンに注目して、翻訳サービスを列挙してみた。

inferno in QEMU on WindowsXP

inferno Install完了画面
QEMUにNative infernoをインストールしたときのメモ

  • 準備
    1. QEMU on Windowsをダウンロード
    2. inferno CD 2007May10をダウンロード
    3. QEMUを適当なところに解凍する(例:”C:\QEMU”)
    4. infernoCDをQEMUのディレクトリ内に解凍する(例:”C:\QEMU\inf.iso”)
  • インストール
    1. 1GBのHardDiskImageの作成(コマンドプロンプト)
      C:\QEMU>qemu-img create -f qcow inferno.img 1G
    2. infernoCDからBoot(コマンドプロンプト)
      C:\QEMU>qemu -L . -m 128 -boot d -cdrom inf.iso -hda inferno.img
    3. インストールシェルスクリプトの実行(QEMU)
      ;sh install.sh -m /dev/sdD0 /dev/sdC0
    4. パーティションをPlan9で作成(QEMU)
      >>> a p1
      start cylinder: 0
      end [0..1024] 1024
      >>> A p1
      >>> w
      >>> q
      
    5. 再起動されるので再度インストールシェルスクリプトを実行(QEMU)
      ;sh install.sh /dev/sdD0 /dev/sdC0
      >>> w
      >>> q
      
    6. 「Remove the CD and reboot」と表示されたらQEMUのWindowsを閉じる
  • 起動確認
    1. (コマンドプロンプト)
      C:\QEMU>qemu.exe -L . -m 128 -hda inferno.img -net nic,model=rtl8139
    2. (QEMU)
      ; wm/wm
      wmlib: can't allocate Display: .initdisplay: /dev/draw/new:
      ;
      

    とりあえず、動きはしたけれど、GUIが立ち上がらない。
    VGAが見えてない?
    QEMUはCL-GD5446をエミュレートしてらしい。
    で、ソースをあさってみると os/pcに

    • vgaclgd542x.c
    • vgaclgd546x.c

    はあった。つまり・・・未対応?
    もしかしたら応用でドライバかけるかもしれないけど今のところ見送り
    QEMUはVESA起動もできるみたいなのでそちらも試してみる

    1. (コマンドプロンプト)
      C:\QEMU>qemu.exe -L . -m 128 -hda inferno.img -net nic,model=rtl8139 -vga std
    2. (QEMU)
      ; wm/wm
      wmlib: can't allocate Display: .initdisplay: /dev/draw/new:
      ;
      

    やっぱり駄目っぽい。
    このCDに入ってるカーネルにはVGAドライバが組み込まれてないのかな?
    このCD起動カーネルと昨日のFD起動カーネルではファイルサイズが結構違う。
    つまり、コンパイルした内容が違うってことだろうけど、
    このCDのカーネルと差し替えれるカーネルをつくるにはどうすればいいんだろう。
    CDのカーネルと同じコンパイル条件を作りたいんだけど、
    そもそもコンパイルオプションとかがよくわかってない。

  • 参考

inferno in VirtualBox on WindowsXP

inferno起動画面
inferno を VirtualBox上で動くように Ubuntu で コンパイル したときのメモ

  • ソースコードの入手
    1. $apt-get install mercurial
    2. $cd /usr
    3. $sudo hg clone https://inferno-os.googlecode.com/hg/ inferno
    4. $sudo chmod -R 777 /usr/inferno

    どうも、コンパイルが通らないのでVita Nuovaのバージョンを利用する。

    1. inferno Fourth Edition(inferno-20100120.tgz)をダウンロード
    2. inferno-20100120.tgzを解凍し、中身を/usr/inferno/へ上書き
  • コンパイル用ライブラリのインストール
    1. $sudo apt-get install libxpm-dev
    2. $sudo apt-get install libxext-dev
    3. $sudo apt-get install x11proto-xext-dev
  • infernoのコンパイル
    1. $sudo vi inferno/mkconfig
      
      @@ -17,0 +18,0 @@
      -	SYSHOST=Plan9
      +#	SYSHOST=Plan9
      +	SYSHOST=Linux
      @@ -25,0 +27,0 @@
      -#	OBJTYPE=368
      -	OBJTYPE=$objtype
      +	OBJTYPE=368
      +#	OBJTYPE=$objtype
      
    2. $sh makemk.sh
    3. $export PATH=$PATH:/usr/inferno/Linux/368/bin/
    4. $mk nuke
    5. $mk install
  • PBS(PCパーティションブートセレクタプログラム)と9load(カーネルローダ)のコンパイル
    1. $mkdir /usr/inferno/Inferno/386/lib/
    2. $sudo chmod -R 777 /usr/inferno/Inferno/386/lib/
    3. $cd /usr/inferno/os/boot/pc/
    4. $mk pbs.install 9load.install
  • カーネルコンパイル
    1. $cd /usr/inferno/os/pc
    2. $vi ether79x970.c
      
      @@ -540,6 +540,7 @@
      	switch(x&0xFFFFFFF){
      	case 0x2420003: /* PCnet/PCI 79C970 */
      	case 0x2621003: /* PCnet/PCI II 79C970A */
      +	case 0x2625003: /* PCnet/FAST III 79C973 */
      		break;
      	default:
      		print("#l%d: unknown PCnet card version %.7ux\n",
      
    3. $vi pc
      
      @@ -48,10 +48,11 @@
      	kern
      
       link
      -	ether2114x      pci
      +	ether79c970     pci
      +#	ether2114x      pci
       #	ether82557      pci
      -	ether83815      pci
      -	etherelnk3      pci
      +#	ether83815      pci
      +#	etherelnk3      pci
      	ps2mouse
      	ethermedium
       #	pppmedium ppp compress
      @@ -70,7 +71,7 @@
      	math
      
       init
      -	wminit
      +	shell
      
       code
      	int kernel_pool_pcnt = 10;
      @@ -79,7 +80,7 @@
      	int image_pool_pcnt = 40;
      	int cflag=0;
      	int swcursor=0;
      -	int consoleprint=0;
      +	int consoleprint=1;
      
       port
      	alarm
      @@ -137,3 +138,5 @@
      	/dis/lib/daytime.dis
      	/dis/lib/auth.dis
      	/dis/lib/ssl.dis
      +	/dis/lib/arg.dis
      +	/dis/lib/filepat.dis
      
    4. $mk
  • カーネルロード設定ファイルの作成
    1. $vi /usr/inferno/os/pc/plan9.ini
      
      bootfile=fd0!ipc.gz
      
  • フロッピーイメージの作成
    1. $emu
    2. ;cd os/pc
    3. ;gzip ipc
    4. ;disk/format -b /Inferno/386/pbs -df inferno.img /Inferno/386/9load plan9.ini ipc.gz

    出来上がったinferno.imgをVirtualBoxにマウントしBoot
    確かに起動はできたが、たまにPanicを起こす。
    infernoもPlan9系だからVirtualBoxではだめなのかもしれない。
    それに、Native infernoをコンパイルできたけど、FD起動なんだよね。
    Plan9のブートローダで起動可能ってことはこれで分かったんだけど、
    HDDからブートさせたい・・・Native infernoを使うにはPlan9の勉強した方がいいかもしれない。
    次回はinferno in QEMU on WindowsXPを試してみよう。

  • 参考

VirtualBox in Ubuntuで共有フォルダ

共有フォルダ設定

  1. 拡張機能のインストール
    1. 仮想マシンウインドウのメニューの「デバイス」→「Guest Additions のインストール」でインストールCDをマウント
    2. $cd /media/VBOXADDITIONS_3.2.4_62467/
    3. $sudo sh VBoxLinuxAdditions-x86.run
  2. 共有フォルダの設定
    1. 仮想マシンウインドウのメニューの「デバイス」→「共有フォルダ…」で共有フォルダを設定
    2. $sudu mkdir /mnt/share
      (マウント先の作成)
    3. $sudo mount.vboxsf Share /mnt/share/
      (共有フォルダをマウント)

FOMA携帯の着信音の作成方法

マイナーな曲を着信音にしたい場合は作るしかないですよね。
ということで着信音に設定可能な3gp着モーションの作り方メモ。
SoundEngineFreeの画面「着もと」の画面1「着もと」の画面2

  • 準備
  • 作り方
    1. お好みの音源をWAVE形式(*.wav)にしてSoundEngineに読み込ませる
    2. 着信音にしたい音を1分程度を目安に切りだし、WAVE形式で保存
    3. 切りだした音源を「着もと」で開く
    4. 着もとの[ツール(T)]-[オプション(O)…]-[変換設定]で「変換設定(AAC-LC)」を開く
    5. サンプリングレートによって音質とファイルサイズがきまるので適切なものを設定する
      (携帯によって設定可能サイズが異なります。300KB制限、500KB制限など)
    6. 女性の顔のアイコンを押し、WAVから3GPに変換する
    7. 途中でタイトル等の入力が求められるので、携帯で見たときに分かりやすいタイトルを入力
    8. 着モーションファイル(*.3gp)を携帯にメールの添付などで送る
      (SDカードに直接入れても認識しないものがあるのでWeb上に置いてダウンロードするかメールでの転送)
  • 参考