haltで電源が切れない。

kurobox.comにあった、haltのバグ。
確かに、電源が切れない。


I have found a tiny "error" in linux-2.6.15/arch/ppc/platforms/linkstation.c :

is:
linkstation_power_off(void)
{
local_irq_disable();
for( ; ; ) ;/* No way to shut power off with software */
out_8((void *)LINKSTATION_SERIAL_0, 0x47); // send shutdown messages
/* NOTREACHED */
}


must be
linkstation_power_off(void)
{
local_irq_disable();
for( ; ; ) /* No way to shut power off with software */
out_8((void *)LINKSTATION_SERIAL_0, 0x47); // send shutdown messages
/* NOTREACHED */
}


なにが違っているのかわからなかったが、よく見るとforのあとのセミコロンが多い。

2.6.15 コンパイル&ブート成功

2ch情報を訂正。やってみた。


304 :270:2006/01/12(木) 09:02:41 id:zXAfy7oD
カーネル2.6.15のコンパイル及びboot手順です。
環境;玄箱HG うぉううぉうさんのdebian_2005_08_21_dist.tgzをsarge化したもの
ディレクトリやsymlinkは何も考えなくてもOKみたいです。
ちなみに、初期導入直後をsarge化したdebianで /mnt/2.6.15/の中でコンパイルしました。
たしか、apt-get install gcc ncurses-dev patchしかしてません。


wget http://webpages.charter.net/trevorpowdrell/kurobox-sources-2.6.15.patch.bz2
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.tar.gz
bunzip2 kurobox-sources-2.6.15.patch.bz2
tar zxpvf linux-2.6.15.tar.gz
patch -Np0

カーネルコンパイルに必要なパッケージ & 2.4.32

カーネルコンパイルに必要なパッケージ
apt-get install gcc ncurses-dev


2.4.32もやってみた。
patchでMakefilerejectされるが、1行訂正のみでOK
EXTRAVERSION = -kurobox

wget http://webpages.charter.net/trevorpowdrell/kurobox.patch.bz2  
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.32.tar.gz  
bunzip2 kurobox.patch.bz2   
tar zxpvf linux-2.4.32.tar.gz
cd linux-2.4.32
patch -Np1 <../kurobox.patch 
cp config_kuroboxhg .config 
make oldconfig 
make dep 
make vmlinux 
sudo objcopy -O binary vmlinux /boot/vmlinux.bin 
make modules 
sudo make modues_install 
sudo reboot 

 

玄箱でkernel 2.4.31 その2

2chにrtcのコンパイルエラーの対策が出てました。
gccのバージョンにも依存します。
修正するファイル drivers/char/rs5c372.c drivers/net/r8169.c

% cd <somewhere>/linux-2.4.31 
% patch < something.txt 

--- ./drivers/char/rs5c372.c.old 2006-01-09 17:53:28.000000000 +0900 
+++ ./drivers/char/rs5c372.c 2006-01-09 20:31:49.000000000 +0900 
@@ -184,6 +184,8 @@ 
} 
else 
{ 
+ time_t sec; 
+ 
/* set 24h time */ 
buf[0] = 0xf0; 
buf[1] = 0x20; 
@@ -202,7 +204,7 @@ 
ppc_md.get_rtc_time=rs5c372_get_rtc_time; 
ppc_md.set_rtc_time=rs5c372_set_rtc_time; 

- time_t sec = rs5c372_get_rtc_time(); 
+ sec = rs5c372_get_rtc_time(); 
xtime.tv_usec = 0; 
if (sec > 0) 
xtime.tv_sec = sec; 


gcc-2.95 またビルド止まった。
関数の中で使ってるauto変数の宣言をネストの先頭じゃなくて
途中でやっちゃってるからエラーで止まるんだな。 > gcc-2.95
drivers/net/r8169.cも手直しぢゃ。

C++じゃないんだから、そんなことやんない方がいいよなぁ。

あと2,3箇所ありそうな悪寒...


結局、gcc-2ではエラーになる。で、これで修正可能
gcc-3なら、修正不要でコンパイル&起動OK

玄箱でkernel 2.4.31

2chの情報で実際にやってみる。


※テンプレ
英語の記事
http://www.kurobox.com/forums/viewtopic.php?t=682
パッチ
http://webpages.charter.net/trevorpowdrell/kurobox.patch.bz2
カーネルソース
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.31.tar.gz


wgetカーネルソースとパッチをget。tarで展開。patchを当てる

hiroyuki@kuro:/mnt/2.4.31$ tar zxpvf linux-2.4.31.tar.gz
hiroyuki@kuro:/mnt/2.4.31$ patch -Np0 <kurobox.patch
hiroyuki@kuro:/mnt/2.4.31$ ln -s linux-2.4.31 linux
hiroyuki@kuro:/mnt/2.4.31$ cd linux

・HG用にコンパイルしてみる。

hiroyuki@kuro:/mnt/2.4.31/linux$ cp config_kuroboxhg .config
hiroyuki@kuro:/mnt/2.4.31/linux$ make oldconfig ;make dep ;make vmlinux
gcc -D__KERNEL__ -I/mnt/2.4.31/linux-2.4.31/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -I/mnt/2.4.31/linux-2.4.31/arch/ppc -fsigned-char -msoft-float -pipe -ffixed-r2 -Wno-uninitialized -mmultiple -mstring   -nostdinc -iwithprefix include -DKBUILD_BASENAME=rs5c372  -c -o rs5c372.o rs5c372.c
rs5c372.c: In function `rs5c372_attach':
rs5c372.c:205: parse error before `sec'
rs5c372.c:207: `sec' undeclared (first use in this function)
rs5c372.c:207: (Each undeclared identifier is reported only once
rs5c372.c:207: for each function it appears in.)
make[3]: *** [rs5c372.o] Error 1
make[3]: Leaving directory `/mnt/2.4.31/linux-2.4.31/drivers/char'
make[2]: *** [first_rule] Error 2
make[2]: Leaving directory `/mnt/2.4.31/linux-2.4.31/drivers/char'
make[1]: *** [_subdir_char] Error 2
make[1]: Leaving directory `/mnt/2.4.31/linux-2.4.31/drivers'
make: *** [_dir_drivers] Error 2
hiroyuki@kuro:/mnt/2.4.31/linux$

※rtcドライバーでエラー。


・ノーマル玄箱で再アタック

hiroyuki@kuro:/mnt/2.4.31/linux$ cp config_kurobox .config
hiroyuki@kuro:/mnt/2.4.31/linux$ make oldconfig ;make dep ;make vmlinux
gcc -D__KERNEL__ -I/mnt/2.4.31/linux-2.4.31/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -I/mnt/2.4.31/linux-2.4.31/arch/ppc -fsigned-char -msoft-float -pipe -ffixed-r2 -Wno-uninitialized -mmultiple -mstring   -nostdinc -iwithprefix include -DKBUILD_BASENAME=rs5c372  -c -o rs5c372.o rs5c372.c
rs5c372.c: In function `rs5c372_attach':
rs5c372.c:205: parse error before `sec'
rs5c372.c:207: `sec' undeclared (first use in this function)
rs5c372.c:207: (Each undeclared identifier is reported only once
rs5c372.c:207: for each function it appears in.)
make[3]: *** [rs5c372.o] Error 1
make[3]: Leaving directory `/mnt/2.4.31/linux-2.4.31/drivers/char'
make[2]: *** [first_rule] Error 2
make[2]: Leaving directory `/mnt/2.4.31/linux-2.4.31/drivers/char'
make[1]: *** [_subdir_char] Error 2
make[1]: Leaving directory `/mnt/2.4.31/linux-2.4.31/drivers'
make: *** [_dir_drivers] Error 2
hiroyuki@kuro:/mnt/2.4.31/linux$

※同じエラー


※環境
hiroyuki@kuro:/mnt/2.4.31/linux$ gcc -v
Reading specs from /usr/lib/gcc-lib/powerpc-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)


2chコンパイル成功した人
カーネルはブートはしたみたいだがネットワークが死んでしまっている
ようで様子がわからん。
Jan 1 09:00:19 kuro-box kernel: klogd 1.4.1#17, log source = /proc/kmsg started.
Jan 1 09:00:19 kuro-box kernel: Cannot find map file.
Jan 1 09:00:19 kuro-box kernel: No module symbols loaded.
Jan 1 09:00:19 kuro-box kernel: KERNELBASE=c0000000 r6=10117cc r7=10117da
Jan 1 09:00:19 kuro-box kernel: cmd_line=root=/dev/hda1
Jan 1 09:00:19 kuro-box kernel: --- cmd=root=/dev/hda1
Jan 1 09:00:19 kuro-box kernel: Memory BAT mapping: BAT2=64Mb, BAT3=0Mb, residual: 0Mb
Jan 1 09:00:19 kuro-box kernel: Linux version 2.4.32-kurobox (piro@kuro-box) (gcc バージョン 3.3.5
(Debian 1:3.3.5-13)) #2 2006年 1月 8日 日曜日 21:42:42 JST

正常debianの構築およびsarge化

玄箱うぉううぉうさんのhttp://kuro.dsk.jp/data/dist/debian_2005_08_21_dist.tgzをインストール。


うぉううぉうさんのdebianに、問題正常化パッチ投入
特に、setserialはremoveしないと、シリアルコンソールが使えません。

echo "con:2345:respawn:/sbin/getty 57600 ttyS0" >>/etc/inittab
echo "ttyS0" >>/etc/securetty
echo "all:all" >>/etc/hosts.allow
find / -group 11 -exec chgrp mail "{}" \;
find / -group 12 -exec chgrp news "{}" \;
find / -group 16 -exec chgrp utmp "{}" \;
find / -group 17 -exec chgrp shadow "{}" \;
find / -group 99 -exec chgrp nogroup "{}" \;
apt-get update
apt-get remove -y --purge amiga-fdisk mac-fdisk ppp pppconfig pppoe pppoeconf quik setserial
apt-get upgrade -y
apt-get clean


HGの場合はこれも必要
そういえばHGだと、debian_2005_08_21_dist.tgz のloader.oの起動が問題ありでした。
/etc/rc3.d/S90kuro_load の insmod に -f を付加してください。


sarge化 /etc/apt/sources.listの変更

deb http://security.debian.org stable/updates main contrib
deb ftp://ftp.dti.ad.jp/pub/Linux/debian stable main contrib
deb ftp://ftp.dti.ad.jp/pub/Linux/debian-non-US stable/non-US main contrib
deb-src ftp://ftp.dti.ad.jp/pub/Linux/debian stable main contrib
deb-src ftp://ftp.dti.ad.jp/pub/Linux/debian-non-US stable/non-US main contrib

apt-get -u dist-update


いろいろ聞かれるが、全てデフォルトでOK