コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2006年12月18日 >>> 2006年12月9日
link もっと後

2006年12月18日

glibcお前もビルドできないのか - その2

目次: C言語とlibc

glibcは最適化を外すとコンパイルできないことを昨日お伝えしました。
これじゃあるオプション(-fno-omit-frame-pointer:フレームポインタの省略を行わない)つけたいのにできないよ、って思ったんですが、試しに -O2 --fno-omit-frame-pointerって同時に指定したらコンパイルできました。

でも確か -O1くらいの最適化をかけると、アーキテクチャによってはフレームポインタが省略されるはずです。それを考えると -O2と -fno-omit-frame-pointerは矛盾した指定に思えますが…?

gccが、オプションを見ているふりをしている可能性も疑って、生成されたlibc-2.3.2.soを逆アセンブルして確認しましたが、フレームポインタの省略はないようです。

というわけで、最適化とこのオプションは排他ではないことがわかりました。うーん、便利ナリ。

-fなんちゃらのオプションってビットフラグみたいな感じなのでしょうか。-O1とか -O2ってのは、それらをまとめて立てたり倒したりするだけかな。

前途多難

とりあえずglibcはうまくいきました。割とすんなりできたのは、glibcがクロスコンパイルのことを考えて作られているからでしょう。

ところが、みんながみんなクロスコンパイルが容易にできるわけじゃないんですよね。

ncursesはautomake/autoconf使ってる(ほんとか?)っぽいのにtarget=arm-linuxって指定しても完全に無視だった。他のライブラリはまだ試してないけど、ずっとこんな調子だったら泣けてしまうよ。

かーねる

あと、以前からつまづいていたのは、Linux kernel 2.4でのmake menuconfigですね。make configはできるから、そっちでやりゃいいんですけど、さすがにmenuconfigすらできないのは悲しすぎです。


ARCH=arm
CROSS_COMPILE=arm-linux-

まず、以上の変数を指定して、make menuconfigすると、こんな事言われます。

$ make menuconfig

Menuconfig has encountered a possible error in one of the kernel's
configuration files and is unable to continue.  Here is the error
report:

 Q> scripts/Menuconfig: line 831: MCmenu0: command not found

Please report this to the maintainer <mec@shout.net>.  You may also
send a problem report to <linux-kernel@vger.kernel.org>.

Please indicate the kernel version you are trying to configure and
which menu you were trying to enter when this error occurred.

make: *** [menuconfig]  1

MCmenu0ってファイルが悪いそうですが、このファイルは自動的に生成される上に、クリーンナップでご丁寧にも消されるので残ってません。というわけでscripts/Menuconfigを追って調べたら、arch/arm/config.inで、drivers/ssi/Config.inというファイルを指定しているところが怪しそう。

わざわざコメントで、ssiだよ、scsiのスペルエラーじゃないよ!なんて書いてありますが、現在のカーネルだとそもそもdrivers/ssi/Config.inと言うファイルがありません。昔はあったのでしょうね。

そのせいでifブロックの中が空のシェルスクリプトが生成され、shが怒っていたのです。
下のような感じでコメントアウトすると良いみたいです。


$ diff -u linux-2.4.33.5/arch/arm/config.in.orig linux-2.4.33.5/arch/arm/config.in
--- linux-2.4.33.5/arch/arm/config.in.orig      2006-12-15 01:29:03.000000000 +0900
+++ linux-2.4.33.5/arch/arm/config.in   2006-12-19 03:33:31.000000000 +0900
@@ -599,10 +599,10 @@
 fi
 endmenu
 
-if [ "$CONFIG_ARCH_CLPS711X" = "y" ]; then
-   # This is _meant_ to be ssi _not_ scsi.  It is not a spelling error.
-   source drivers/ssi/Config.in
-fi
+#if [ "$CONFIG_ARCH_CLPS711X" = "y" ]; then
+#   # This is _meant_ to be ssi _not_ scsi.  It is not a spelling error.
+#   source drivers/ssi/Config.in
+#fi
 
 source drivers/ieee1394/Config.in

って書いた後で、既に指摘されていたことがわかったりすると、ほんとガッカリだよ(´・ω・`)ネー。
しかし、私にはmakeの出すエラーメッセージとarch/arm/config.inがおかしい、って事はパッと結びつかなくて、検索もできませんでしたよ…。宇宙人ですか?この人は。

ちなみに、arm以外にも影響あるっぽいので、カーネルクロスコンパイルしちゃうぜ、って奇特な方は参考にどうぞ。

まあ、俺の思いつく事なんてたいがい、どっかのすげー人がやったことの二番煎じなのさ。それならそれでいいのだ。

編集者:すずき(2023/04/29 21:47)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月17日

glibcお前もビルドできないのか

目次: C言語とlibc

昨日の日記の繰り返しになりますが、私がやりたいのは、変なオプション付けてglibcをビルドすることです。
いきなりやると大抵うまくいかないので、初めに何も付けずにビルドしました。簡単な修正が必要ですが、特に問題なく成功しました。

あとはオプション変えるだけだと思ったら、やっぱダメでした。下のメッセージのように、最適化を外すなって怒られます。

$ make
(...snip...)
/tmp/build/glibc-2.3.2/config.h:3:3: #error "glibc cannot be compiled without optimization"

そういえば以前、hdk氏より「Linuxカーネル(12/18訂正:カーネル -> Linuxカーネル)は最適化をoffにするとコンパイルできない」と教えてもらたっけなあ。
今日になって同じような現象に出会うとは、夢にも思いませんでしたよ。

ビルドメモ

まずapt-get source glibcとして、取ってきたglibc_2.3.2.ds1.orig.tar.gzを展開すると、glibc-2.3.2.tar.bz2とglibc-linuxthreads-2.3.2.tar.bz2が出てくるので、それらを展開します。

そして、Zaurus Cross さんにあるglibc-2.3.2向けのバグフィクスパッチを当てます。
こういう素晴らしいお仕事してくれる方がいるから、ほんと助かります…。


# ソース取ってくる
$ apt-get source glibc
$ tar -xzvf glibc_2.3.2.ds1.orig.tar.gz

# 展開、linuxthreadsアドオンだっけ?それも展開
$ tar -xjvf glibc-2.3.2.tar.bz2
$ cd glibc-2.3.2
$ cp ../glibc-linuxthreads-2.3.2.tar.bz2 ./
$ tar -xjvf glibc-linuxthreads-2.3.2.tar.bz2

# パッチ当て
$ patch -p1 < glibc-2.3.2-arm.patch

# さらに修正必要、修正内容については後ろの方に載ってます
(修正)

# ビルド用のディレクトリに移動
$ cd ../
$ mkdir build
$ cd build

# こんふぃぎゃー
# カーネルヘッダは適したものを使ってください
$ ../glibc-2.3.2/configure --prefix=/home/username/usr/local/arm --target=arm-linux \
--enable-shared --enable-add-ons --enable-kernel=2.4.x \
--host=arm-linux --with-headers=/home/username/usr/src/linux-2.4.x/include

# ビルド、インストール
$ make
$ make install

ちなみにglibcのコンパイルも含めて、Zaurus Crossさんが超くわしいので、そちら見た方がためになります。

修正箇所

コンパイル通らないと困るので晒しておきます。
初めはglibc-2.3.2/include/libc-symbols.hの @nobitsを削ってたんですが、ググったら %nobitsにすればいいよ、ってのがあったので直しました。


--- glibc-2.3.2/sysdeps/unix/sysv/linux/arm/ioperm.c.orig       2003-02-21 07:22:24.000000000 +0900
+++ glibc-2.3.2/sysdeps/unix/sysv/linux/arm/ioperm.c    2006-12-17 23:21:42.000000000 +0900
@@ -47,6 +47,8 @@
 #include <asm/page.h>
 #include <sys/sysctl.h>
 
+#include <linux/input.h>
+
 #define PATH_ARM_SYSTYPE       "/etc/arm_systype"
 #define PATH_CPUINFO           "/proc/cpuinfo"
--- glibc-2.3.2/include/libc-symbols.h.orig     2003-01-04 08:21:03.000000000 +0900
+++ glibc-2.3.2/include/libc-symbols.h  2006-12-17 23:21:01.000000000 +0900
@@ -247,7 +247,7 @@
     __attribute__ ((unused, section (".gnu.warning." #symbol __sec_comment))) \r     = msg;
 #  define libc_freeres_ptr(decl) \r-  __make_section_unallocated ("__libc_freeres_ptrs, "aw", @nobits") \r+  __make_section_unallocated ("__libc_freeres_ptrs, "aw", %nobits") \r   decl __attribute__ ((section ("__libc_freeres_ptrs" __sec_comment)))
 #  define __libc_freeres_fn_section \r   __attribute__ ((section ("__libc_freeres_fn")))
編集者:すずき(2023/04/29 21:46)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月16日

Debianかっこいー!

研究上の用入りで glibc含むあまたのライブラリに変なオプション付けてクロスコンパイルしなきゃならなくて、とってもめんどくさいです。やる気出ません。
とりあえずクロスコンパイル環境を構築するために作業しています。

作業の途中で、Debianパッケージのすごさを垣間見ました。

# su
# apt-get build-dep gcc-3.3
# exit

$ apt-get -b source gcc-3.3

ってやるだけで、パッケージからソース解凍して、Debian用のパッチ当てて、ビルドするところまで出来ます。いやー、すげーわ。

プログラマ寄りの視点から見ると、なんでそこまでやるかね?って感じです。
利用者から見ると、楽すぎて涙がちょちょ切れます。ありがたいです。

同じ要領でクロスコンパイル環境も構築できないかなあ。
まあDebianならやっちゃってそうな気もしますけどね、私が無知なためわかりません。地味にやります。

編集者:すずき(2006/12/17 21:55)

コメント一覧

  • kawasakiさん(2006/12/18 02:54)
    automake / autoconf の環境であれば、環境変数(ccとか)を設定して、./configure --build=powerpc-unknown-linux-gnu --host=i686-pc-none とかすればいい気がします。
  • すずきさん(2006/12/18 04:35)
    基本はおっしゃる通りなんですが、難儀なものでなかなかコンパイル通らないんですよ…。
open/close この記事にコメントする



2006年12月15日

@gamesの謎

昨日紹介したクリックスを提供している @games ですが、IEじゃないとゲームのページにたどり着けない変な仕組みになっています。
ゲームの置いてあるページに直に飛ぶと行けるんですけどね…。

直リンの謎

@gamesのゲームが置いてあるページは、以下のように直に打てばIE以外の人でもいける。

http://www.atgames.jp/atgames/html/game/flash/0000.html

最後の4桁の数字.htmlとなっている部分を変えるとゲームが切り替わる。
今のところ17種類あるみたい。

番号ゲーム名 備考
0001ウォーターボム ひたすらかわす
0002キュートショット ゴルフみたいなゲーム
0003チューチューパニック
0004アクアミッション イライラ棒
0005アニマルクエスト
0006消毒ナースナオミちゃん連打系
0007スーパーリフティング
0008土用丑
0009CLICK'S
0010アイサツワールド タイピングゲーム
0011ぷちぷち さめがめ
0012電算マニア 暗算ゲーム
0013フルーツショップ
0014フォレストストーリー |_| の形に繋げない。バグ?
0015セルフィスタジアム いわゆる野球盤
0016ポイ
0017ナンバリング 数独

しかし0000や0018以上にするとサーブレットがエラーで落ちるってのはどうなんだ。
Error processing the templateと出る。しかし Not found ではないらしい。

編集者:すずき(2006/12/16 02:04)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月14日

徹夜できません

徹夜したら次の日は眠いのは当たり前なんですけど、だんだん耐久力がなくなっているらしくて、最近は意識が飛ぶように眠くなります。
シス情セミナーでも寝てたし、研究室でも寝ていた。いかんな。

何歳になってもゲーム

今日、9Fの研究室ではクリックスというゲームが大流行です。自分もやってみたんですが、シンプルながらなかなか面白いです。暇つぶしに最適。
ちょっと操作しづらいのが難点です。しかも一番基本である、数字の増減がわかりづらいから困る。一回間違うと戻せないからさらに困る。

今日もやってみたんですけどLv.74(36万点)でした。30万点超えた辺りから、5秒悩んだら終了してしまう。この段階での操作ミスは死を意味します。

アイテムの存在を今日知ったので使ってみたんですが、序盤はブロックシャッフルが効きますね。
後半はブロックをメチャクチャにされるとかえってわからなくなって死んだので、連鎖が起きるまでランダム消しを連打するか、あるいは操作ミスならヒビ直し -> タイム回復のコンボかな?どちらにせよアイテムはすぐ無くなるので、さほど点数は伸びませんでした…。

編集者:すずき(2006/12/15 23:05)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月13日

WindowsとUnicode

hdk氏とファイル名にUnicodeの制御文字を入れて遊んでいたら、案外面白い絵が撮れました。貼ろうと思ったんですが、既にhdk氏のページにあるので割愛です。
ステータスバー、ウインドウのタイトル、パスを表示している部分など全て同様におかしくなります。


パス名もへんてこになる(クリックで拡大)

ちなみにコマンドプロンプトなどから触れなくなります(Tabで補完するとなぜか使える)が、ショートファイルネームを使って叩けば平気みたいね。

さらに

エクスプローラでは長いファイル名は折り返されて表示されます。その処理が原因なのかUnicodeの制御文字が入っていると表示がおかしくなります。


見た目は普通(?)のファイル名(クリックで拡大)


折り返されると変(クリックで拡大)

編集者:すずき(2006/12/14 09:43)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月12日

微妙な改造

RSSの更新日時を出すようにしました。といっても、先頭のdc:dateだけです。記事の更新日時は、記事に示した日付の正午に固定しました。
やろうと思えばmixiのように過去のエントリは書けない腐れ仕様にして、記事を作成した時刻を出せます。でも不便だし細かい時刻を出したところでさほど意味を感じないので割愛です。

RSSの日時なんざどうでも良くて、実はHEADにLast-Modifiedを出力しようと企んでる途中なわけですよ。

何のためかと言うとアンテナに優しいサイトを目指すためです。
身近にはhdk氏の Asahina antenna in Univ. of Tsukuba(ばなな(※))があります。

って、このサイト入ってないんだけどね。
確か最初に入れないでくれーって言った記憶がある。なんでだっけなあ…?Last-Modified出すようになったら入れてもらおうかな。と都合の良いことを考え中。

アーンテーナの神殿

それはさておきhdk氏にアンテナってどうやって更新をチェックするのか聞いてみたら、基本的にはHEADらしいです。ということはHEADでだんまりなページはやりづらい(「ばなな」は他の方法でも取るので平気?)でしょうね。
あとContent-Lengthも出そうと思っています。けど、計算間違って変なことになりそうです。

そういやアンテナはRSSリーダーに押されているのか、あまり見なくなりました。これもご時世か。

(※)今は「つくばさん」です。タイトルに注目。

編集者:すずき(2006/12/14 08:04)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月11日

うでの肉

セイコーマートの焼きうどんが好きで結構買って食べてるんですが、材料に「豚うで肉」って書いてあって、うで?なんじゃそれ?って思った。
調べてみると「良く運動する部位なので、脂肪分が少なくヘルシー」とのこと。要は安くて固い肉ね。わかったナリ。


うで肉使ってます

うで肉の情報を探していたら豚の腕の骨とうで肉を分離する専用の機械なんかも見つかった。
肩甲骨は手でやっても面倒くさそうな形しているのできっと需要があるんだろう。

編集者:すずき(2006/12/12 18:39)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月10日

ペットの定義

人間はペットを飼いますが、人間以外の動物はペットを飼わないのでしょうか?
組み合わせで「人 - 犬」と表すとすると、例えば「熊 - 犬」とかさ。

問題を考えるに当たって、まずペットとは何か?を定義しましょう。飼う理由は、癒される、言うこと聞く、など無数にあります。共通して言えるのは「近くに居てためになる」ってことです。

それは「共生」でしょうか?
共生の例としては、アリとアブラムシなんてのが挙げられるのですが、ペットとは呼びません。ペットと言うと片方が絶対的な支配者であるように感じます。

では「寄生」でしょうか?
寄生とは片方が利益を得るのみ、もう一方は害を受けるのみ(宿主)という関係を指すので、それは言い過ぎです。

つまりどっちでもありません。てけとーにまとめるとこんな感じ。
(いらっしゃーい)共生 -- ペット -- 寄生(うぜえ)
♪なくてもいいけど、少しはあったほうが…そんなの微妙すぎ〜♪(わかる人はわかる表現)

ペットの意義

さて、生きるか死ぬかのシビアな環境を考えると、ペットより共生する生物の方がWin-Winの関係を築けるため圧倒的に有利です。またペットは寄生に徹しておらず簡単に排除されるため、排除してもすがりついてくる寄生する生物に対して、生存能力が劣ります。
まとめるとペットはどちらと比べても生存に関して有利な点がない半端な存在です。

生存競争という観点ではペットという関係は非効率的で不利であり、シビアな自然界ではそんな関係は排除され、存在し得ないんです。

熊が犬を飼わないのはそういう理由ですね。お互いに良いことがあまりないんです。
ペットとは、生きるのにあくせくしなくなった人間の象徴なのでしょう。

以上、根拠無しの妄想のため、それっぽく見えれば成功。

編集者:すずき(2006/12/11 19:37)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2006年12月9日

すごいねぐせ

雨降ってたから引き籠もってたけど、家が寒くて不快です。昼なのに室温10度って何さ。温度計が死んでるのか?
起きたら髪にエキサイティングな寝癖が付いていたが、面倒くさいからそのまま買い物に行った。

今日、変なハガキが発掘されました。開けてみたら明日の茨城県議会議員選挙のハガキじゃないか。もう無くなったもんだと思ってたんですが、見つかりました。
明日はついでに床屋行かないと、もーボサボサさ。

編集者:すずき(2006/12/10 05:46)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2006年12月18日 >>> 2006年12月9日
link もっと後

管理用メニュー

link 記事を新規作成

<2006>
<<<12>>>
-----12
3456789
10111213141516
17181920212223
24252627282930
31------

最近のコメント5件

  • link 24年4月22日
    hdkさん (04/24 08:36)
    「うちのHHFZ4310は15年突破しまし...」
  • link 24年4月22日
    すずきさん (04/24 00:37)
    「ちゃんと数えてないですけど蛍光管が10年...」
  • link 24年4月22日
    hdkさん (04/23 20:52)
    「おお... うちのHHFZ4310より後...」
  • link 20年6月19日
    すずきさん (04/06 22:54)
    「ディレクトリを予め作成しておけば良いです...」
  • link 20年6月19日
    斎藤さん (04/06 16:25)
    「「Preferencesというメニューか...」

最近の記事3件

  • link 24年4月25日
    すずき (04/29 10:08)
    「[AVIFの変換] AVIFが読めないアプリケーションがたまにあるので、AVIF(AV1 Image File Format)...」
  • link 24年2月7日
    すずき (04/24 02:52)
    「[複数の音声ファイルのラウドネスを統一したい] PCやデジタル音楽プレーヤーで音楽を聞いていると、曲によって音量の大小が激しく...」
  • link 24年4月22日
    すずき (04/23 20:13)
    「[仕事部屋の照明が壊れた] いきなり仕事部屋のシーリングライトが消えました。蛍光管の寿命にしては去年(2022年10月19日の...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 04/29 10:08