Hack BBS

[全部のスレッド一覧][新規投稿][記事の削除・変更] [Home Page]

返信投稿はタイトルのリンクをクリックして下さい
スレッド【No.6216】の中の記事をすべて表示しています

【No.6216】のスレッド
14/06/08(日) 18:37:09 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6216】 タイトル[どなたかLS-HGLのカーネルのアップグレードの方法をご存じないですか] この記事がスレッドの最初です
機種:LS-H500GL
ファームウェア:1.07β
ディストリビューション:lenny

たとえば、カーネルlinux-2.6.34.14のソースにおいて、arch/arm/mach-orion5xのところに、ls_hgl-setup.cが含まれています。
この、ls_hgl-setup.cを利用してカーネルをコンパイルするなど行えば、最終的にLS-HGLのカーネルのバージョンを2.6.16.16から2.6.34.14にアップグレードすることが出来るのだろうと思います。
どなたか、カーネルのコンパイルを行って、LS-HGLに導入して利用できるようにする方法を教えて下さい。



14/07/16(水) 20:47:32 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6224】 タイトル[LS-HGLのカーネルのアップグレードが出来ました(kernel 3.2.61へ)] 【No.6216】に対する返信
カーネルのアップグレードが、一応出来たので報告します。
細かいテストはしていませんが、今のところ、電源スイッチでのシャットダウン不可 以外は、問題ないようです?

まず、カーネル2.6.34にアップグレードした後squeezeにアップグレードし、その後、カーネル3.2.61にアップグレードした後wheezyにアップグレードしました。

カーネルの作業概要は以下の通りです。LS-HGL実機で作業しました。
保証するするものではありませんので、自己責任でお願いします。

@ カーネルをダウンロードし、解凍し、そのディレクトリへ移動する。
A make mrproperを実行する。
B make ARCH=arm orion5x_defconfigを実行する。
C make ARCH=arm menuconfigを実行する。
 ここで、Orion Implementationsのところで、LS-HGL以外のチェックを全て外す。
 また、File systemsのところで、XFS filesystem supportにチェックを入れる。
D make ARCH=arm zImageを実行する。(カーネル3.2.61の場合は約6時間半かかりました。)
E devio > foo 'wl 0xe3a01c07,4' 'wl 0xe38110d5,4' を実行する。
F cat foo arch/arm/boot/zImage > zImage.newを実行する。
G mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n 'linux' -d zImage.new uImage.new を実行する。
H make ARCH=arm modules を実行する。
I make ARCH=arm modules_install INSTALL_MOD_PATH=my_modulesを実行する。
J 空のinitrd.buffaloを/bootに置いて、Gで出来たuImage.newを/bootにuImage.buffaloとしてコピーする。
K my_modules/lib/modules内の3.2.61を/lib/modules/に丸ごとコピーする。
L depmod -aを実行する。

そして、再起動します。

(追伸)
初回、正常に起動しない場合は、リセットボタンを押しながら電源を入れ直します。

以上の作業は、自己責任でお願いします。




14/07/21(月) 11:47:37 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6226】 タイトル[LS-HGLで、カーネルをビルドして最新のkernel 3.15.6に出来ました] 【No.6224】に対する返信
引き続き、最新のstableカーネルソース3.15.6を入手して、ビルドしました。
方法は、記事No.6224と同じです。
そのDmake ARCH=arm zImageの作業が完了するのに、12時間半程度かかりました。

現在、LS-HGLをそのカーネル3.15.6で使っていますが、その状況は以下のとおりです。
・/var/log/messageに気になるメッセージが2行ある。
 mv643xx_eth_port mv643xx_eth_port.0 eth0: link down
 mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 100 Mb/s, full duplex, flow control disabled
・電源を切るときは、電源スイッチをOFFにして、haltコマンドを実行する必要がある。
今のところ、気づいたのはこんなところです。他にも何かあるかも知れません。

14/07/17(木) 21:46:59 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6225】 タイトル[追伸] 【No.6224】に対する返信
電源SWによるシャットダウンやLEDの制御は諦めました。
どなたか対応していただければありがたいです。

なお、USBメモリの抜き差しは可能になっていました。

14/08/17(日) 17:35:53 投稿者[そのだ] [No.6216]のスレッド内
【No.6227】 タイトル[Re: 追伸] 【No.6225】に対する返信
電源SWの状態を取得できるようにls_hgl-setup.cを修正しました。
カーネル3.12.22で動作確認しています。参考にして頂けると幸いです。

下記の処理が行えます。
@電源SWの状態取得 #cat /proc/ls-gpio/sw
Afuncswの状態取得 #cat /proc/ls-gpio/funcsw
Busb電源の状態取得 #cat /proc/ls-gpio/powers/usb
電源off操作 #echo off > /proc/ls-gpio/powers/usb
電源on操作 #echo on > /proc/ls-gpio/powers/usb
CHDD電源の状態取得 #cat /proc/ls-gpio/powers/hdd
電源off操作 #echo off > /proc/ls-gpio/powers/hdd
電源on操作 #echo on > /proc/ls-gpio/powers/hdd
DLEDランプ操作は標準(ただしLED名称を変更しています。)
LED名称変更
.name = "alarm:red" → "alarm"
.name = "info:amber" → "info"
.name = "func:blue:top" → "func"
.name = "power:blue:bottom" → "power"

LED操作例1 alarm on # echo 1 > /sys/class/leds/alarm/brightness
LED操作例2 func off # echo 0 > /sys/class/leds/func/brightness


以下 修正内容です。

--- linux-3.12.22.org/arch/arm/mach-orion5x/ls_hgl-setup.c 2014-06-11 16:07:28.000000000 +0900
+++ linux-3.12.22/arch/arm/mach-orion5x/ls_hgl-setup.c 2014-08-17 17:22:20.000000000 +0900
@@ -21,11 +21,44 @@
#include <linux/gpio.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
+#include <asm/system.h>
#include <mach/orion5x.h>
#include "common.h"
#include "mpp.h"

/*****************************************************************************
+ * Add
+ ****************************************************************************/
+
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+
+#define PROC_WRITE_MAX_LENGTH 8 /* maximum chars written to proc file */
+
+/*****************************************************************************
+ * Add
+ ****************************************************************************/
+
+static struct proc_dir_entry *proc_root;
+static struct proc_dir_entry *proc_powers;
+
+/*****************************************************************************
+ * Add
+ ****************************************************************************/
+#define GPIO_LED_FUNC 17
+#define GPIO_LED_POWER 0
+#define GPIO_LED_ALARM 2
+#define GPIO_LED_INFO 3
+#define GPIO_LED_ETH 11
+
+#define GPIO_SW_POWER 8
+#define GPIO_SW_AUTO 10
+#define GPIO_SW_FUNC 15
+
+#define GPIO_POWER_USB 9
+#define GPIO_POWER_HDD 1
+
+/*****************************************************************************
* Linkstation LS-HGL Info
****************************************************************************/

@@ -88,19 +121,19 @@

static struct gpio_led ls_hgl_led_pins[] = {
{
- .name = "alarm:red",
+ .name = "alarm",
.gpio = LS_HGL_GPIO_LED_ALARM,
.active_low = 1,
}, {
- .name = "info:amber",
+ .name = "info",
.gpio = LS_HGL_GPIO_LED_INFO,
.active_low = 1,
}, {
- .name = "func:blue:top",
+ .name = "func",
.gpio = LS_HGL_GPIO_LED_FUNC,
.active_low = 1,
}, {
- .name = "power:blue:bottom",
+ .name = "power",
.gpio = LS_HGL_GPIO_LED_PWR,
},
};
@@ -190,6 +223,183 @@


/*****************************************************************************
+ * Add
+ ****************************************************************************/
+
+static int proc_sw_show(struct seq_file *m, void *v)
+{
+ if ( gpio_get_value(GPIO_SW_AUTO) == 0 ) {
+ seq_printf(m, "%s\n", "auto");
+ } else {
+ if ( gpio_get_value(GPIO_SW_POWER) == 0 ) {
+ seq_printf(m, "%s\n", "on");
+ } else {
+ seq_printf(m, "%s\n", "off");
+ }
+ }
+ return 0;
+}
+
+static int proc_sw_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, proc_sw_show, NULL);
+}
+
+static const struct file_operations proc_sw_operations = {
+ .open = proc_sw_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static int proc_fsw_show(struct seq_file *m, void *v)
+{
+ if ( gpio_get_value(GPIO_SW_FUNC) == 0 ) {
+ seq_printf(m, "%s\n", "on");
+ } else {
+ seq_printf(m, "%s\n", "off");
+ }
+ return 0;
+}
+
+static int proc_fsw_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, proc_fsw_show, NULL);
+}
+
+static const struct file_operations proc_fsw_operations = {
+ .open = proc_fsw_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static int proc_usb_power_show(struct seq_file *m, void *v)
+{
+ if ( gpio_get_value(GPIO_POWER_USB) != 0 ) {
+ seq_printf(m, "%s\n", "on");
+ } else {
+ seq_printf(m, "%s\n", "off");
+ }
+ return 0;
+}
+
+static int proc_usb_power_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, proc_usb_power_show, NULL);
+}
+
+static ssize_t proc_usb_power_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
+{
+ char *buf = NULL;
+
+ if (count > PROC_WRITE_MAX_LENGTH)
+ count = PROC_WRITE_MAX_LENGTH;
+
+ buf = kmalloc(sizeof(char) * (count + 1), GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ if (copy_from_user(buf, buffer, count)) {
+ kfree(buf);
+ return -EFAULT;
+ }
+
+ buf[count] = '\0';
+
+ /* work around \n when echo'ing into proc */
+ if (buf[count - 1] == '\n')
+ buf[count - 1] = '\0';
+
+ if(strcmp(buf, "on") == 0 ) {
+ gpio_set_value(GPIO_POWER_USB, 1 );
+ } else if(strcmp(buf, "off") == 0 ) {
+ gpio_set_value(GPIO_POWER_USB, 0 );
+ }
+
+ kfree(buf);
+
+ return count;
+}
+
+static const struct file_operations proc_usb_power_operations = {
+ .open = proc_usb_power_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+ .write = proc_usb_power_write,
+};
+static int proc_hdd_power_show(struct seq_file *m, void *v)
+{
+ if ( gpio_get_value(GPIO_POWER_HDD) != 0 ) {
+ seq_printf(m, "%s\n", "on");
+ } else {
+ seq_printf(m, "%s\n", "off");
+ }
+ return 0;
+}
+
+static int proc_hdd_power_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, proc_hdd_power_show, NULL);
+}
+
+
+static ssize_t proc_hdd_power_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
+{
+ char *buf = NULL;
+
+ if (count > PROC_WRITE_MAX_LENGTH)
+ count = PROC_WRITE_MAX_LENGTH;
+
+ buf = kmalloc(sizeof(char) * (count + 1), GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ if (copy_from_user(buf, buffer, count)) {
+ kfree(buf);
+ return -EFAULT;
+ }
+
+ buf[count] = '\0';
+
+ /* work around \n when echo'ing into proc */
+ if (buf[count - 1] == '\n')
+ buf[count - 1] = '\0';
+
+ if(strcmp(buf, "on") == 0 ) {
+ gpio_set_value(GPIO_POWER_HDD, 1 );
+ } else if(strcmp(buf, "off") == 0 ) {
+ gpio_set_value(GPIO_POWER_HDD, 0 );
+ }
+
+ kfree(buf);
+ return count;
+}
+
+static const struct file_operations proc_hdd_power_operations = {
+ .open = proc_hdd_power_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+ .write = proc_hdd_power_write,
+};
+
+static int gpio_proc_init(void)
+{
+ proc_root = proc_mkdir("ls-gpio", 0 );
+
+ proc_create("ls-gpio/sw", 0, NULL, &proc_sw_operations);
+ proc_create("ls-gpio/funcsw", 0, NULL, &proc_fsw_operations);
+
+ proc_powers = proc_mkdir("ls-gpio/powers",0);
+ proc_create("ls-gpio/powers/usb", 0, NULL, &proc_usb_power_operations);
+ proc_create("ls-gpio/powers/hdd", 0, NULL, &proc_hdd_power_operations);
+
+ return 0;
+}
+
+/*****************************************************************************
* General Setup
****************************************************************************/

@@ -262,6 +472,9 @@
pm_power_off = ls_hgl_power_off;

pr_info("%s: finished\n", __func__);
+
+ gpio_proc_init();
+
}


14/10/05(日) 07:24:44 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6244】 タイトル[結局、こんな風にしました(報告)] 【No.6227】に対する返信
そのださんから、教えて頂いたカーネル用のパッチを利用させて頂き、後はkernelmonを以下のとおり修正して、電源SWでシャットダウンするようにしました。

$ cat /etc/init.d/kernelmon
#!/bin/sh

case "$1" in
start)
if [ -e /proc/ls-gpio/sw ]
then
echo on > /proc/ls-gpio/sw
fi
/usr/local/sbin/kernelmon &
;;
stop)
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

exit 0

$ cat /usr/local/sbin/kernelmon
#!/bin/sh

while :
do
LINE=`cat /proc/ls-gpio/sw`
#echo "line [$LINE]"
if [ "$LINE" = off ]
then
shutdown -h now
fi
done

※もし、どこか間違えがあれば、ご指摘下さい。また、もっとスマートな方法があれば、教えて下さい。お願いします。

14/10/10(金) 06:00:50 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6245】 タイトル[さらに、こんな風にしました(報告)] 【No.6244】に対する返信
ついでに、LEDのPOWERも消灯するようにしました。

$ cat /usr/local/sbin/kernelmon
#!/bin/sh

while :
do
    LINE=`cat /proc/ls-gpio/sw`
    #echo "line [$LINE]"
    if [ "$LINE" = off ]
    then
        echo "1" > /sys/class/leds/power/brightness
        shutdown -h now
    fi
done

※これについても、何かあればアドバイスをお願いします。

14/08/26(火) 19:58:40 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6234】 タイトル[ファンコントロールは出来ないようになっているのですね] 【No.6227】に対する返信
 本当に、そのださん、ご教示に感謝しています。
私独自で、ファンコントロール出来ないか、トライしてみました。
ネタは、[PATCH 1/1] ARM Orion: added Buffalo LS-CHL supportなのですが。
create_proc_entry関数が、最新のカーネルになくproc_createに変わっているので、自分なりに苦労して修正しました。
そして、makeに成功したところが、ファンコントロールが出来ない。

元々、LS-HGLはファンコントロール出来ないんですね。

※ご教示頂いた中で、alarm:red を alarm に変えるなど、すごいと、つくずく思いまいた。

14/08/19(火) 20:27:33 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6229】 タイトル[非常に有益な情報有り難うございました。さて] 【No.6227】に対する返信
 そのださん、ありがとうございました。大変感謝します。
kernel3.14.17で利用させていただきました。ご教示のとおり作動しました。

 さて(でも)、kernel3.15からは、asm/system.hがなくなっています。asm/system_info.hやasm/system_misc.hでは代用出来ないようです。私の力量では無理です。残念です。

14/08/19(火) 23:46:12 投稿者[そのだ] [No.6216]のスレッド内
【No.6230】 タイトル[Re: 非常に有益な情報有り難うございました。さて] 【No.6229】に対する返信
toyo36jeffさん、ご報告ありがとうございます。
最近、カーネルを3.3.3から3.12.22にアップしました。
カーネル3.12.22で使用しなくなったasm/system.hが残っていたようです。

// +#include <asm/system.h>

カーネル3.12.22で#include <asm/system.h>をコメントアウトして正常に動作することを確認しました。

最新のカーネル3.16.1で再度チャレンジをお願い致します。

14/10/02(木) 17:06:43 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6241】 タイトル[ところで、話は変わりますが、kernelのアップグレード時のコツ、是非、教えてください] 【No.6230】に対する返信
本当に、ご教示に感謝しています。素人の私にとっては、非常にありがたいです。

さて、LS-HGLに最新のカーネルを入れることに成功して喜んでいたところ、本体及びHDDが壊れてしまいました。
@本体は、別機動作確認済み標準ファームHDDを入れても、全く起動しなくなりました。
AHDDはフォーマットは出来るもののデータを書き込むと、IOエラーとなってしまいました。
5年以上連続運転していたので耐用年数を過ぎたのかと思いますが、偶然にも最新カーネルを入れた次期にパシャってしまいました。

そこで、質問ですが、LS-HGL本体やHDDを壊さないコツがあれば、是非、教えてください。
例えば、合っているか分かりませんが、make ARCH=arm menuconfig 時において、File sysytems で XFS filesystem support にチェックを入れたら、必ず、XFS Quota support にもチェックを入れるなどあるのでは、当てずっぽうですが、自分なりに思っています。
これが、正解かどうか全くわかりません。

何か、カーネルのコンパイル時のアドバイス(本体とHDDへの負担回避について)、是非、教えてください。

14/10/03(金) 00:17:35 投稿者[そのだ] [No.6216]のスレッド内
【No.6242】 タイトル[Re: ところで、話は変わりますが、kernelのアップグレード時のコツ、是非、教えてください] 【No.6241】に対する返信
toyo36jeffさん
園田です。
>何か、カーネルのコンパイル時のアドバイス(本体とHDDへの負担回避について)、是非、教えてください。
私のカーネルコンパイル環境を説明します。
LS-HGL本体でカーネルコンパイルを行うと時間がかかりすぎるので、パソコンでクロスコンパイルしています。カーネルコンパイルは30分程度で終わります。
@パソコンにVMware Playerを入れて、debianのシステムを構築しています。
A確認をするためにtftpブートしてカーネルの動作確認をしています。
 tftpサーバもdebianで起動しています。
BクロスコンパイルソフトはBuildrootを入れてarmのシステムをmakeすることで自動でインストールされますのでカーネル作成時にそのクロスコンパイルソフトを指定します。
Cユーザーランド(initrd.buffalo)もBuildrootで構築できます。

私のLS-HGLは、ユーザランド(initrd.buffalo)、カーネル(uImage.buffalo)共、全て作り直して運用しています。

14/10/04(土) 04:32:56 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6243】 タイトル[ありがとうございます] 【No.6242】に対する返信
ご親切に回答いただき、感謝します。

書き込みを読ませて頂き、非常に参考になりました。
カーネルmake前のチェック項目は、LS-HGL本体やHDDへの負担には、あまり関係がないようですね。よく分かりました。

(おまけ)
今思えば、約5年ほとんど連続運転していたLS-HGLに、カーネル2.6.34のmakeを行い、squeezeにアップグレード、次に、カーネル3.2.61のmakeを行い、wheezyにアップグレードと続けざまに行なっていました。相当、本体とHDDに負担がかかったのではないかと思われます。
カーネルのアップグレードが生まれて初めて出来たので、有頂天になってしまったようです。(こちらの地方では、この気持ちの状態を「よかきしょく」と言います。)

14/08/23(土) 17:20:17 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6233】 タイトル[Re:Re: 非常に有益な情報有り難うございました。さて] 【No.6230】に対する返信
>// +#include <asm/system.h>
>
>最新のカーネル3.16.1で再度チャレンジをお願い致します。
>

最新のstableカーネル3.16.1で、ご教示のとおりで成功しました。
電源SWの状態取得を、$ cat /proc/ls-gpio/sw で出来ます。

ありがとうございます。


14/08/21(木) 20:14:05 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6231】 タイトル[LS-HGLで電源スイッチ制御出来ました(kernel3.16.1)] 【No.6230】に対する返信
素早い情報の提供に大変感謝しています。
実は、ネット検索で、早合点してasm/system.hの代わりにasm/switch_to.hをインクルードして、kernel3.16.1をmakeしました。
ご教示をもとに推察すると、asm/switch_to.hはインクルードされただけで終わっていると考えています。電源制御は出来るようになりました。
新しいカーネルでは、電源制御等にはasm/system.hは勿論asm/switch_to.hも必要無いようですね。

14/08/17(日) 21:33:49 投稿者[toyo36jeff] [No.6216]のスレッド内
【No.6228】 タイトル[非常に有意義な情報、ありがとうございます。] 【No.6227】に対する返信
 ありがとうございます。
 ちょっと調べてみました。
$ diff -u linux-3.12.22/arch/arm/mach-orion5x/ls_hgl-setup.c linux-3.16.1/arch/arm/mach-orion5x/ls_hgl-setup.c
$
ということは、最新のカーネル3.16.1でも対応できそうですね。
カーネル3.16.1のls_hgl-setup.cを修正して導入にチャレンジします。
 本当にご提供、ありがとうございます。