Raspberry Pi (raspbian) + Planex GW-450D [Raspberry Pi]
Raspberry Pi のNICだけが逝ってしまったのでその代替として11acの無線LAN子機「GW-450D」を導入した。ドライバ導入はメーカ(プラネックス)記事、
・「Raspberry Piで11ac無線LAN子機『GW-450D』を使うための設定方法」
を参考にしたが、当然、カーネルバージョンが上がっているので少し手順追加・変更が必要であった。
まずインストール済みRaspbianのカーネルバージョンは、
・GW-450DやWN-AC433UKをRaspberry Piで使う
ちなみに手元の環境のGCCバージョンは
次にファームウェアを最新版へアップデート。これはGW-450Dドライバのビルド環境を作成する際に取得するカーネルソースバージョンも最新版となるので、これらを同一にするのが目的。
次にこれに対応した最新版カーネルソースを取得しGW-450Dドライバのビルド環境を作成。
・https://bitbucket.org/sanrath/mediatek_mt7610u_sta_driver_linux-64bit/commits/a989fcd6e073205690434e99ac1dc2b0f837350b
の修正をあてることで、何とかコンパイルすることができた。以下はこれにVendorID、ProductIDなどの変更を追加したパッチファイルになる。
最後に冒頭のメーカ(プラネックス)記事を参考にネットワーク設定すれば良い。
・「Raspberry Piで11ac無線LAN子機『GW-450D』を使うための設定方法」
を参考にしたが、当然、カーネルバージョンが上がっているので少し手順追加・変更が必要であった。
まずインストール済みRaspbianのカーネルバージョンは、
$ uname -rだったが、この場合先人によればGCCのバージョンアップが必要とのことなので、その方の記事を参考にここではGCCバージョンアップのみを実施。
3.18.7+
・GW-450DやWN-AC433UKをRaspberry Piで使う
ちなみに手元の環境のGCCバージョンは
$ gcc -vへ上がっていた。
・・・・・・
gcc version 4.8.3 (Raspbian 4.8.3-13)
次にファームウェアを最新版へアップデート。これはGW-450Dドライバのビルド環境を作成する際に取得するカーネルソースバージョンも最新版となるので、これらを同一にするのが目的。
$ sudo apt-get updateちなみに手元の環境で確認すると、
$ sudo apt-get dist-upgrade
$ sudo apt-get install make bc ncurses-dev
$ sudo rpi-update
$ sudo reboot
$ uname -rがこの時点の最新カーネルバージョンだった。
3.18.8+
次にこれに対応した最新版カーネルソースを取得しGW-450Dドライバのビルド環境を作成。
$ sudo su
# cd /usr/src
# wget https://github.com/raspberrypi/linux/archive/rpi-3.18.y.tar.gz
# tar xvfz rpi-3.18.y.tar.gz
# head -5 linux-rpi-3.18.y/Makefile
VERSION = 3
PATCHLEVEL = 18
SUBLEVEL = 8
EXTRAVERSION =
NAME = Diseased Newt
# ln -s /usr/src/linux-rpi-3.18.y/ /lib/modules/`uname -r`/build
# cd /lib/modules/`uname -r`/build
# make mrproper
# zcat /proc/config.gz > .config
# make modules_prepare
# wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers
<3/9追記>いよいよ「GW-450D」ドライバのコンパイルであるが、このままでは途中エラーが発生してコンパイルできなかった。いろいろとググってみて、
Raspberry Pi 2の場合は上記最終行が以下になる
# wget https://github.com/raspberrypi/firmware/raw/master/extra/Module7.symvers -O Module.symvers
・https://bitbucket.org/sanrath/mediatek_mt7610u_sta_driver_linux-64bit/commits/a989fcd6e073205690434e99ac1dc2b0f837350b
の修正をあてることで、何とかコンパイルすることができた。以下はこれにVendorID、ProductIDなどの変更を追加したパッチファイルになる。
あとはこのパッチを当てればコンパイル・インストールできる筈である。$ cat mediatek_mt7610u_sta_driver_for_3.18.8.patch diff -urN a/RT2870STA.dat b/RT2870STA.dat --- a/RT2870STA.dat 2013-09-16 23:03:08.000000000 +0900 +++ b/RT2870STA.dat 2015-03-07 15:15:54.696136992 +0900 @@ -6,7 +6,7 @@ ChannelGeography=1 SSID=11n-AP NetworkType=Infra -WirelessMode=5 +WirelessMode=8 EfuseBufferMode=0 Channel=0 BeaconPeriod=100 @@ -17,7 +17,7 @@ FragThreshold=2346 TxBurst=1 PktAggregate=0 -WmmCapable=1 +WmmCapable=0 AckPolicy=0;0;0;0 AuthMode=OPEN EncrypType=NONE diff -urN a/chips/mt76x0.c b/chips/mt76x0.c --- a/chips/mt76x0.c 2013-09-16 23:03:08.000000000 +0900 +++ b/chips/mt76x0.c 2015-03-07 15:15:54.706136902 +0900 @@ -1573,7 +1573,7 @@ E2: B0.R21<0>: xo_cxo<0>, B0.R22<7:0>: xo_cxo<8:1> */ RFValue = (UCHAR)(pAd->RfFreqOffset & 0xFF); - RFValue = min(RFValue, 0xBF); /* Max of 9-bit built-in crystal oscillator C1 code */ + RFValue = min(RFValue, (UCHAR)0xBF); /* Max of 9-bit built-in crystal oscillator C1 code */ rlt_rf_write(pAd, RF_BANK0, RF_R22, RFValue); rlt_rf_read(pAd, RF_BANK0, RF_R22, &RFValue); diff -urN a/common/cmm_info.c b/common/cmm_info.c --- a/common/cmm_info.c 2013-09-16 23:03:08.000000000 +0900 +++ b/common/cmm_info.c 2015-03-07 15:15:54.716136813 +0900 @@ -44,7 +44,7 @@ #ifdef CONFIG_STA_SUPPORT IF_DEV_CONFIG_OPMODE_ON_STA(pAd) - DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__)); + DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s %s\n", STA_DRIVER_VERSION, STA_DRIVER_BUILD)); #endif /* CONFIG_STA_SUPPORT */ return TRUE; diff -urN a/common/cmm_mac_usb.c b/common/cmm_mac_usb.c --- a/common/cmm_mac_usb.c 2013-09-16 23:03:08.000000000 +0900 +++ b/common/cmm_mac_usb.c 2015-03-07 15:15:54.726136723 +0900 @@ -27,6 +27,8 @@ #ifdef RTMP_MAC_USB +#define usb_buffer_alloc(a, b, c, d) usb_alloc_coherent(a, b, c, d) +#define usb_buffer_free(a, b, c, d) usb_free_coherent(a, b, c, d) #include "rt_config.h" diff -urN a/common/cmm_wpa.c b/common/cmm_wpa.c --- a/common/cmm_wpa.c 2013-09-16 23:03:08.000000000 +0900 +++ b/common/cmm_wpa.c 2015-03-07 15:15:54.736136634 +0900 @@ -1802,17 +1802,17 @@ Return Value: Note: - Output * KDF-Length (K, label, Context) where + Output \A1\F6 KDF-Length (K, label, Context) where Input: K, a 256-bit key derivation key label, a string identifying the purpose of the keys derived using this KDF Context, a bit string that provides context to identify the derived key Length, the length of the derived key in bits Output: a Length-bit derived key - result * "" - iterations * (Length+255)/256 + result \A1\F6 "" + iterations \A1\F6 (Length+255)/256 do i = 1 to iterations - result * result || HMAC-SHA256(K, i || label || Context || Length) + result \A1\F6 result || HMAC-SHA256(K, i || label || Context || Length) od return first Length bits of result, and securely delete all unused bits @@ -2480,7 +2480,7 @@ UCHAR PrimaryRsnie; BOOLEAN bMixCipher = FALSE; /* indicate the pairwise and group cipher are different*/ UCHAR p_offset; - WPA_MIX_PAIR_CIPHER FlexibleCipher = MIX_CIPHER_NOTUSE; /* it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode*/ + WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; /* it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode*/ rsnielen_cur_p = NULL; rsnielen_ex_cur_p = NULL; diff -urN a/common/mlme.c b/common/mlme.c --- a/common/mlme.c 2013-09-16 23:03:08.000000000 +0900 +++ b/common/mlme.c 2015-03-07 15:15:54.746136544 +0900 @@ -535,8 +535,8 @@ #endif /* RALINK_ATE */ /* for performace enchanement */ NdisZeroMemory(&pAd->RalinkCounters, - (UINT32)&pAd->RalinkCounters.OneSecEnd - - (UINT32)&pAd->RalinkCounters.OneSecStart); + (ULONG)&pAd->RalinkCounters.OneSecEnd - + (ULONG)&pAd->RalinkCounters.OneSecStart); return; } diff -urN a/common/rtusb_dev_id.c b/common/rtusb_dev_id.c --- a/common/rtusb_dev_id.c 2013-09-16 23:03:08.000000000 +0900 +++ b/common/rtusb_dev_id.c 2015-03-07 15:15:54.746136544 +0900 @@ -36,8 +36,9 @@ /* module table */ USB_DEVICE_ID rtusb_dev_id[] = { #ifdef MT76x0 + {USB_DEVICE(0x2019,0xAB31)}, /* GW-450D */ {USB_DEVICE(0x148F,0x7610)}, /* MT7610U */ - {USB_DEVICE(0x0E8D,0x7610)}, /* MT7610U */ + {USB_DEVICE(0x13B1,0x003E)}, /* MT7610U */ {USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7630, 0xff, 0x2, 0xff)}, /* MT7630U */ {USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7650, 0xff, 0x2, 0xff)}, /* MT7650U */ #endif diff -urN a/conf/RT2870STA.dat b/conf/RT2870STA.dat --- a/conf/RT2870STA.dat 2013-09-16 23:03:08.000000000 +0900 +++ b/conf/RT2870STA.dat 2015-03-07 15:15:54.756136455 +0900 @@ -4,9 +4,9 @@ CountryRegionABand=7 CountryCode= ChannelGeography=1 -SSID=11n-AP +SSID= NetworkType=Infra -WirelessMode=5 +WirelessMode=8 EfuseBufferMode=0 Channel=0 BeaconPeriod=100 @@ -17,10 +17,10 @@ FragThreshold=2346 TxBurst=1 PktAggregate=0 -WmmCapable=1 +WmmCapable=0 AckPolicy=0;0;0;0 -AuthMode=OPEN -EncrypType=NONE +AuthMode=WPA2PSK +EncrypType=AES WPAPSK= DefaultKeyID=1 Key1Type=0 diff -urN a/contributors.txt b/contributors.txt --- a/contributors.txt 1970-01-01 09:00:00.000000000 +0900 +++ b/contributors.txt 2015-03-07 15:15:54.756136455 +0900 @@ -0,0 +1 @@ +Sanjit Rath diff -urN a/include/mcu/mt7650_firmware.h b/include/mcu/mt7650_firmware.h --- a/include/mcu/mt7650_firmware.h 2013-09-16 23:24:08.000000000 +0900 +++ b/include/mcu/mt7650_firmware.h 2015-03-07 15:25:46.590039797 +0900 @@ -1,28 +1,5 @@ -/* - ************************************************************************* - * Ralink Tech Inc. - * 5F., No.36, Taiyuan St., Jhubei City, - * Hsinchu County 302, - * Taiwan, R.O.C. - * - * (c) Copyright 2002-2010, Ralink Technology, Inc. - * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * * - *************************************************************************/ +/* AUTO GEN PLEASE DO NOT MODIFY IT */ +/* AUTO GEN PLEASE DO NOT MODIFY IT */ UCHAR MT7650_FirmwareImage[] = { diff -urN a/include/os/rt_linux.h b/include/os/rt_linux.h --- a/include/os/rt_linux.h 2013-09-16 23:03:08.000000000 +0900 +++ b/include/os/rt_linux.h 2015-03-07 15:15:54.776136276 +0900 @@ -277,8 +277,8 @@ typedef struct _OS_FS_INFO_ { - int fsuid; - int fsgid; + kuid_t fsuid; + kgid_t fsgid; mm_segment_t fs; } OS_FS_INFO; @@ -880,11 +880,20 @@ #define SET_OS_PKT_LEN(_pkt, _len) \ (RTPKT_TO_OSPKT(_pkt)->len) = (_len) + +#ifdef NET_SKBUFF_DATA_USES_OFFSET +#define GET_OS_PKT_DATATAIL(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->head + (ULONG)RTPKT_TO_OSPKT(_pkt)->tail) +#define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ + ((RTPKT_TO_OSPKT(_pkt))->tail) = (ULONG)_start - (ULONG)(RTPKT_TO_OSPKT(_pkt)->head) + (_len) +#else #define GET_OS_PKT_DATATAIL(_pkt) \ (RTPKT_TO_OSPKT(_pkt)->tail) #define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ - ((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)((_start) + (_len)) - + ((RTPKT_TO_OSPKT(_pkt))->tail) = (ULONG)((_start) + (_len)) +#endif + + #define GET_OS_PKT_HEAD(_pkt) \ (RTPKT_TO_OSPKT(_pkt)->head) diff -urN a/os/linux/config.mk b/os/linux/config.mk --- a/os/linux/config.mk 2013-09-16 23:03:08.000000000 +0900 +++ b/os/linux/config.mk 2015-03-07 15:15:54.776136276 +0900 @@ -23,12 +23,12 @@ # Support Wpa_Supplicant # i.e. wpa_supplicant -Dralink -HAS_WPA_SUPPLICANT=n +HAS_WPA_SUPPLICANT=y # Support Native WpaSupplicant for Network Maganger # i.e. wpa_supplicant -Dwext -HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n +HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y #Support Net interface block while Tx-Sw queue full HAS_BLOCK_NET_IF=n @@ -207,12 +207,20 @@ HAS_WIFI_P2P_CONCURRENT_FAST_SCAN=n +STA_DRIVER_BUILD := 20141022-1327 + ################################################# CC := $(CROSS_COMPILE)gcc LD := $(CROSS_COMPILE)ld -WFLAGS := -g -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT -DLINUX -Wall -Wstrict-prototypes -Wno-trigraphs +ifndef $(WFLAGS) +WFLAGS := -DSTA_DRIVER_BUILD="\"${STA_DRIVER_BUILD}\"" +else +WFLAGS += -DSTA_DRIVER_BUILD="\"${STA_DRIVER_BUILD}\"" +endif + +WFLAGS += -g -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT -DLINUX -Wall -Wstrict-prototypes -Wno-trigraphs WFLAGS += -DSYSTEM_LOG_SUPPORT -DRT28xx_MODE=$(RT28xx_MODE) -DCHIPSET=$(MODULE) -DRESOURCE_PRE_ALLOC -DENHANCED_STAT_DISPLAY #WFLAGS += -DFPGA_MODE WFLAGS += -I$(RT28xx_DIR)/include @@ -660,7 +668,7 @@ WFLAGS += -DCONFIG_CSO_SUPPORT -DCONFIG_TSO_SUPPORT endif -CHIPSET_DAT = 2860 +CHIPSET_DAT = 2870 endif ifneq ($(or $(findstring mt7662e,$(CHIPSET)),$(findstring mt7612e,$(CHIPSET))),) diff -urN a/os/linux/rt_linux.c b/os/linux/rt_linux.c --- a/os/linux/rt_linux.c 2013-09-16 23:03:08.000000000 +0900 +++ b/os/linux/rt_linux.c 2015-03-07 15:15:54.786136186 +0900 @@ -497,9 +497,9 @@ MEM_DBG_PKT_ALLOC_INC(skb); skb_reserve(skb, 2); - NdisMoveMemory(skb->tail, pHeader802_3, HdrLen); + NdisMoveMemory(GET_OS_PKT_DATATAIL(skb), pHeader802_3, HdrLen); skb_put(skb, HdrLen); - NdisMoveMemory(skb->tail, pData, DataSize); + NdisMoveMemory(GET_OS_PKT_DATATAIL(skb), pData, DataSize); skb_put(skb, DataSize); skb->dev = pNetDev; /*get_netdev_from_bssid(pAd, FromWhichBSSID); */ pPacket = OSPKT_TO_RTPKT(skb); @@ -650,7 +650,7 @@ pClonedPkt->dev = pRxPkt->dev; pClonedPkt->data = pData; pClonedPkt->len = DataSize; - pClonedPkt->tail = pClonedPkt->data + pClonedPkt->len; + SET_OS_PKT_DATATAIL(pClonedPkt, pClonedPkt->data, pClonedPkt->len); ASSERT(DataSize < 1530); } return pClonedPkt; @@ -695,7 +695,7 @@ pOSPkt->dev = pNetDev; pOSPkt->data = pData; pOSPkt->len = DataSize; - pOSPkt->tail = pOSPkt->data + pOSPkt->len; + SET_OS_PKT_DATATAIL(pOSPkt, pOSPkt->data, pOSPkt->len); /* copy 802.3 header */ @@ -1105,9 +1105,10 @@ pOSFSInfo->fsuid = current->fsuid; pOSFSInfo->fsgid = current->fsgid; current->fsuid = current->fsgid = 0; + #else pOSFSInfo->fsuid = current_fsuid(); - pOSFSInfo->fsgid = current_fsgid(); + pOSFSInfo->fsgid = current_fsgid(); #endif pOSFSInfo->fs = get_fs(); set_fs(KERNEL_DS); diff -urN a/os/linux/usb_main_dev.c b/os/linux/usb_main_dev.c --- a/os/linux/usb_main_dev.c 2013-09-16 23:03:08.000000000 +0900 +++ b/os/linux/usb_main_dev.c 2015-03-07 15:15:54.786136186 +0900 @@ -39,7 +39,7 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Paul Lin
"); MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver"); - +MODULE_LICENSE("GPL"); #ifdef CONFIG_STA_SUPPORT #ifdef MODULE_VERSION MODULE_VERSION(STA_DRIVER_VERSION); diff -urN a/sta/sta_cfg.c b/sta/sta_cfg.c --- a/sta/sta_cfg.c 2013-09-16 23:03:08.000000000 +0900 +++ b/sta/sta_cfg.c 2015-03-07 15:15:54.796136097 +0900 @@ -5398,7 +5398,7 @@ wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ break; case SHOW_DRVIER_VERION: - snprintf(extra, size, "Driver version-%s, %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__ ); + snprintf(extra, size, "Driver version-%s, %s\n", STA_DRIVER_VERSION, STA_DRIVER_BUILD ); wrq->u.data.length = strlen(extra) + 1; /* 1: size of '\0' */ break; #ifdef DOT11_N_SUPPORT
$ tar xvjf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2なお、文字コードの関係で一部リジェクトされ、手修正が必要になる場合がある。
$ cd mt7610u_wifi_sta_v3002_dpo_20130916/
$ patch -p1 < ../mediatek_mt7610u_sta_driver_for_3.18.8.patch
$ make
$ sudo make install
最後に冒頭のメーカ(プラネックス)記事を参考にネットワーク設定すれば良い。
Raspberry Pi 2 (raspbian) Kodi+iptvsimpleでメディアセンター [Raspberry Pi]
注文した「Raspberry Pi 2」が手元に届いたので早速raspbianを導入、更にKodi+iptvsimpleをインストールしメディアセンターとして使用してみた。
最初にkodiのインストール、
ちなみにOSMC(Raspbmcの後継)、OpenELEC(ver.5.0.3)とiptvsimpleでライブ視聴を試してみたがこちらの方では動作させることができなかった。
このままではホーム画面の電源ボタンでは「終了」メニューしか表示されないので、必要であれば以下で「シャットダウン」メニューなどを追加すると良いだろう。
最初にkodiのインストール、
$ sudo vi /etc/apt/sources.list.d/mene.listこの時ユーザー「kodi」も新規追加される。次は電源ONでKodiが自動起動するよう設定、
deb http://archive.mene.za.net/raspbian wheezy contrib
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 5243CDED
$ sudo apt-get update
$ sudo apt-get install kodi
$ sudo vi /etc/default/kodiこれでOS再起動でKodiが立ち上がってくるが、このままではキーボード等の入力を受け付けてくれなかったので、以下を設定した。
# Set this to 1 to enable startup
ENABLED=1
# The user to run Kodi as
USER=kodi
・・・・・・・・・・・・
$ sudo vi /etc/group立ち上がってきたKodiの日本語化は以前のこの記事を参考に。次にiptvsimpleをインストール、
・・・・・・・・・・・・
netdev:x:105:pi
input:x:999:pi,kodi
messagebus:x:106:
・・・・・・・・・・・・
$ sudo reboot
$ sudo apt-get install kodi-pvr-iptvsimpleiptvsimpleの設定の方も以前のこの記事を参考に。
ちなみにOSMC(Raspbmcの後継)、OpenELEC(ver.5.0.3)とiptvsimpleでライブ視聴を試してみたがこちらの方では動作させることができなかった。
このままではホーム画面の電源ボタンでは「終了」メニューしか表示されないので、必要であれば以下で「シャットダウン」メニューなどを追加すると良いだろう。
$ sudo su【2015.3.21追記】これで上手く行かない場合は、最終行を「no」にして試してみる。
# vi /var/lib/polkit-1/localauthority/50-local.d/kodi.pkla
[Actions for xbmc user]
Identity=unix-user:kodi
Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
Raspberry Pi(OpenELEC、Raspbmc)を家庭用TVからリモコン操作 [Raspberry Pi]
Raspberry Pi(OpenELEC又はRaspbmc、最近は主に後者)は省電力なメディアプレヤーとして重宝している。家庭用TVと接続した際にはリモコンでの操作が便利だが、Raspberry PiのGPUはCEC(Consumer Electronics Control)をサポートしているので別にリモコンを用意すること無く、家庭用TVリモコンでそのまま操作できる。詳細は「CEC - XBMC」によるが、これは家電メーカが言うところの、「Regza Link」、「VIERA Link」、「BRAVIA Link」..のことらしく、DVDレコーダ等の周辺機器をTVリモコンから一元的に操作することを目的にしているようだ。こういった類の機器は持っていないので実際に操作したことはないが..。
自身はTOSHIBAのTV(REGZA)とHDMI接続しているが、双方特別な設定は必要ない。Raspberry Pi側の電源ON/OFFでTV側も自動で電源ON/OFF・入力切替の他、XBMCの基本操作も可能であり不自由はない。因みに一般PCでは別にCECアダプターなるものが必要になるようだが、Raspberry Piなら単独で出来てしまう。
自身はTOSHIBAのTV(REGZA)とHDMI接続しているが、双方特別な設定は必要ない。Raspberry Pi側の電源ON/OFFでTV側も自動で電源ON/OFF・入力切替の他、XBMCの基本操作も可能であり不自由はない。因みに一般PCでは別にCECアダプターなるものが必要になるようだが、Raspberry Piなら単独で出来てしまう。
Raspberry Pi ルートファイルシステムをUSBドライブに変更 [Raspberry Pi]
たまたま自身のRaspberryPiだけなのか、SDカード上のルートファイルシステム(/dev/mmcblk0p2)がよく壊れる。SDカードを替えても同じで、またOpenELEC、Raspbian双方で発生している。何とか改善できないかと、SDカード上のルートファイルシステムをUSBドライブ側に変更して様子をみることにした。以下がRaspbianについての変更手順になる。準備するものは次の通り。
・SDカード(Raspbianをインストール済)
・USBフラッシュメモリ(ラベル名:USBDISK、ext4でフォーマット済)
・Ubuntu 12.10マシン
UbuntuマシンにSD、USBフラッシュメモリをセットしたら夫々のマウントポイント確認しておく。
ちなみにOpenELECも同様な手順で行けるが、「/etc/fstab」の変更は不要であった。またこちらの方もルートファイルシステムが壊れる事象はまだ発生していない。
・SDカード(Raspbianをインストール済)
・USBフラッシュメモリ(ラベル名:USBDISK、ext4でフォーマット済)
・Ubuntu 12.10マシン
UbuntuマシンにSD、USBフラッシュメモリをセットしたら夫々のマウントポイント確認しておく。
$ ls /media/USER/ #USERはログイン名ここでUUID1、UUID2はRaspbianインストルール済SDカードの「boot」パーティション、「/(ルート)」パーティション のそれぞれのUUID(実際はHEX値の並び)に置換える。まず「/(ルート)」配下のファイルを丸ごとUSBDISKへコピー。
USBDISK UUID1 UUID2
$ sudo su次に「boot」パーティションにある「cmdline.txt」の「root=/dev/mmcblk0p2」を以下の通り変更、
# cd /media/USER/UUID2/
# tar cfpv - --exclude=./lost+found --exclude=./sys --exclude=./proc . | tar xfpv - -C /media/USER/USBDISK/
# sync
# cd /media/USR/USBIDSK/
# mkdir sys
# mkdir proc
# vi /media/USER/UUID1/cmdline.txt同様にUSBDISK側「/etc/fstab」の「/dev/mmcblk0p2」も以下の通り変更。
・・・・console=tty1 root=/dev/sda1/ rootfstype=ext4・・・・・・・・
# vi /media/USER/USBDISK/etc/fstab/これで、このSDカードとUSBフラッシュメモリでルートファイルシステムがUSBドライブのRaspbianが無事起動できた。まだUSB運用はそれほど長くはないが、ルートファイルシステムが壊れる事象はまだ発生していない。
/proc /proc ・・・・・・・・・・・・・・・・・
/dev/mmcblk0p1 /boot ・・・・・・・・・・・・・・・・・
/dev/sda1 / ・・・・・・・・・・・
ちなみにOpenELECも同様な手順で行けるが、「/etc/fstab」の変更は不要であった。またこちらの方もルートファイルシステムが壊れる事象はまだ発生していない。