## 按
/ j! g3 F8 V: \0 w4 _
! G' G]) J, {+ m0 |" C/ Y一开始,我是想试试看能不能借由原生linux解决魔盒伪1080输出的问题。毕竟国内厂商靠不住这件事人尽皆知,求人不如求己。现在新版魔盒已经出来了,这个问题原厂就更加不会管了。, p; ?# s" g/ Z$ c
% U) H, Q0 S& k, s目前debian可以在魔盒上跑起来了,但问题还是很多。首先是音频驱动存在问题,alsamixer显示找不到控制器,aplay不报错但电视机端也没有音频输出。其次是遥控和usb口也都无法使用。
5 {# g. E& }! l( L]1 A) T/ K5 v. p* W+ ]4 G4 v6 d- E
这些问题不解决,即使花很多功夫把xbmc编译出来也没有实用价值。而我最近事情有些多,暂时没办法继续搞下去了。写这张帖子是希望,如果有人对这个问题有兴趣,可以通过我的帖子节约一点时间,也算是回馈论坛了吧。
: D: h5 z# J2 |5 C* m) l; x) h# V7 L8 M* e" s# Z- P- N7 a/ }; w
哈哈6014和1024255317给我提供了不少帮助,一并在此表示感谢。$ B, M# X) ^. c" b0 a6 z
' m5 V) s* W8 P: i- w# Z: V9 \## UBOOT. U& T% A8 T. Y7 U1 v- |' w* E
! X* s% S& q, ^4 N) J' t^6 \" {' ]因为我希望保留nand内的安卓系统,所以linux就只能安装在tf卡中。虽然有朝一日如果能研究出点成果,拆机并不是必须的步骤。但就目前而言,没有uart接口就看不到输出,没法折腾,所以拆机焊线就目前来说仍然是必须的。
/ @( s7 `2 j% I6 D* o( L
& }2 E9 T, ^, G为了一张tf卡在两个系统中都派上用场,我把一张16G的tf卡为了两个区,第一个分区4G的fat32,剩余部分则格式化为ext3。/ M' M% G6 Q9 z: s- h; {' u! r
C# X3 x' d- A/ D) OF2 ?想要启动时加载tf卡上根目录中名为uImage的内核文件,我们可以在uboot中这么做:
: v' x& u6 L3 t( N8 x0 Y
mmcinfo0 `6 z" X# J@" {* i# b
fatload mmc 0 ${loadaddr} uImage% l8 z6 [, t, z2 o- z
bootm
5 u, ^5 }# V$ Q+ }% Y7 o# a复制代码如果希望启动时默认加载tf卡上的linux内核,则可以这样做:
7 C2 B7 W6 O1 v0 p0 M" a. @: i
setenv bootlnx 'mmcinfo; fatload mmc 0 ${loadaddr} uImage; bootm; '
, D8 K" _% }* D% h, wu, z
setenv bootcmd 'run bootlnx'
* \1 h" z# N: J: l; s3 S
saveenv
u% n* Z9 Q5 S4 L; C. Q0 W复制代码另外还有个法子,可以在上电时通过狂按遥控上的菜单键加载tf卡上的系统:
6 `9 n& g8 ]; E# m; k! K; o
setenv bootlnx 'mmcinfo; fatload mmc 0 ${loadaddr} uImage; bootm; '
7 C0 Y) i$ D- W) |7 h
setenv irremote_update 'if irkey 0x1f2d12e 500000 ;then run bootlnx; fi'$ R2 d) f0 j- W5 L: e+ [
saveenv
) ~5 d9 i: Y( ]( J0 jv1 p复制代码关于uboot的更多内容,可以参考一下这张帖子:/thread-235366-1-1.html0 \2 z: N. Z4 r1 n1 O
7 B$ P, D) T6 X7 F## 内核
: f2 B7 {% u|0 P5 f* @! S* {% ^9 d" u7 e
amlogic官方放出的内核以及驱动源码这里有::8000/download/ARM/
3 K: k. l" s) H( ag7 R. c
/ B( v; Z7 V$ E8 F! r# ~7 e# E8 W' M不过直接用这里的代码虽然能够成功编译,但实际使用时有非常多的问题,所以我用的是wjb@github修改整理的版本。
5 v% ^; B( C3 [3 F8 H6 V
; ]" `+ N( `& ^& b; k编译内核使用的是ubuntu 12.04,安装必须的软件包什么的我就不废话了,具体编译过程大概是这样:
( ?. O# v$ b5 k6 t
sudo apt-get install gcc-arm-linux-gnueabihf
9 J" l1 x5 A2 \
( \4 D& C8 Z$ Z7 |1 ]6 X
git clone /wjb/mx-common.git
& H1 O' y6 @3 J2 s
cd mx-common
% g( T: @4 x& a* m
6 @/ b; G; K4 ~9 l
export CROSS_COMPILE=arm-linux-gnueabihf-# ^7 M+ Q( ]3 ?+ y7 w! X
export ARCH=arm3 g8 i# M' U' o
make mrproper$ L" ?# Q+ |4 v
make meson6_g18_mx2_defconfig
# w) R6 O8 C, t- {' s4 i/ N
make menuconfig
0 c0 }! w' n( T' @
make uImage -j4
& [+ Y: }/ J6 I/ R
make modules -j4
7 e# v9 n3 L8 n) g- S/ c; y
+ h) h5 _5 u0 t5 a) w; s8 H( q
sudo cp arch/arm/boot/uImage /media/BOOT: o! vJ5 ~0 Y6 d1 m
sudo make INSTALL_MOD_PATH=/media/AMLinux modules_install
8 d! h% Q7 H3 ]5 ]1 ~9 v复制代码## Debian! h* d, E6 l* c; A, Y( m4 a
3 n6 E$ J' u: H) tUbuntu和Debian都提供了ARM支持,下面的方法两个发行版都适用。不过只用命令行的话,Ubuntu远不如Debian好用,再加上stable的Debian软件包太老,所以下面安装的是sid的Debian。7 `3 P" }# wN2 Z; C4 ^7 J
, s8 J0 J+ i% `/ R
* Y: |4 Q. u$ c. s0 U, F# I9 X
sudo apt-get install qemu-arm-static debootstrap
. C- x8 S9 M- B9 o: Ghmkdir debian-armhf-sid
1 `# N9 J* _0 R1 P# L& f+ Lsudo debootstrap --foreign --arch armhf sid debian-armhf-sid http://ftp./debian/% R7 w' d- O6 M$ Z
sudo cp /usr/bin/qemu-arm-static debian-armhf-sid/usr/bin/% L6 H( o# `! u* D' S
sudo chroot debian-armhf-sid /debootstrap/debootstrap --second-stage
, U& I/ Q6 \0 R9 K* z. nsudo chroot debian-armhf-sid
1 t" n8 P7 W}0 j1 _# T
2 J- S$ w0 Z: f4 e5 N
, K6 b8 M' ^$ V: G2 g4 A3 R9 k
qemu-arm-static很不错,可以直接在PC上chroot进ARM系统,相当方便。
( i6 S0 O$ F0 C: k: G3 ]' V8 m" r& G7 b+ B
然后就是一些基本设置:6 f9 |4 C' [3 L* `# C/ d% Q* a
! |( `( _( K$ T; o`) C. J
3 Q/ w' x; i) `passwd) F1 j" x9 N0 J; p( v
echo AMLinux > /etc/hostname1 E- B0 W' E4 l; J$ W6 N7 F
echo deb http://ftp./debian sid main contrib non-free >> /etc/apt/sources.list
% J& `; `- w* g2 o+ capt-get update
" W8 h$ }" MV# L8 A4 uapt-get install locales$ L+ g; A7 l1 |4 ]j: ]
dpkg-reconfigure locales# ~1 p$ \% u! n) W0 r8 x
apt-get install wireless-tools wpasupplicant" @+ F/ K- J9 f/ K* A0 `1 }* N
mknod -m 660 /dev/ttyS0 c 4 64
' p5 [. Q; a$ d# ?' D0 ~
: L2 K9 w3 t6 I6 J9 n3 G$ r! c! a9 n
% D$ c8 Y9 yL/ d; M
编辑/etc/inittab,将ttyS0所在行改为:
1 R! _/ f. k9 G2 O
/ ]7 y$ d; S1 T- T8 }
, L0 u% x0 K+ U% p! D" s( n
T0:2345:respawn:/sbin/agetty -L ttyS0 115200 vt100
7 B( J! n4 R% S6 g; @" f
) S5 |( ]1 s4 _! u5 \6 z
. ?: ]' I. x" g& M4 OL2 J1 @2 g6 W完成后cp -a将debian-armhf-sid复制到TF卡的ext3分区,到这里该TF卡就可以在魔盒中成功启动了。
$ w! ?5 R) T4 J: L6 c0 _# [3 w0 }
## 现存问题
; q/ d. @# G+ Pt+ H& R( p9 @8 q3 s4 l% v9 g
### 有线网卡的mac地址问题
5 M2 Z1 i1 @1 y4 S9 N: x
$ C9 U- V- \6 t2 g+ O# i! c, o在启动linux时,log里有一句未配置mac地址,使用随机地址的信息。进入linux后重启进入android,系统会自动运行一个叫MiptAutoTestForAli-10030的程序。虽然看起来很吓人,但其实只要在这个程序中选择写入随机mac地址再退出,就可以正常使用android系统了。
. ?9 ~, z+ t. ?) r
2 k9 z" _, i' I; u: I% b这有可能是linux下的网卡驱动不完善导致的,不过也不是什么大问题就是。( H' d% k# V( O' B- o
- {% G9 j. \, p4 Q}+ u$ P### usb口无法使用* T6 t0 n6 \- O& Yi1 [* ]9 L: }
# s# @% C/ j; ~* z" g
启动信息看不出什么问题,usb相关内容都有也都正常,但不管是启动前还是启动后插入usb设备,系统都认不出来。
$ h- l% a- ~7 W6 |
3 ?. I# t( @1 M- S### 音频输出c: M0 w1 I$ q# e. K9 C- ~
" u& q* ], O0 u: Q/ cY6 Z9 X
amlogic虽然也用了alsa,但似乎没有提供/dev/dsp一类标准接口。在android中我用optware安装了alsa相关工具,同样有alsamixer显示无控制器,aplay无法输出的问题,所以这究竟是怎么回事还有待研究。
' c6 O+ L8 U4 j& O3 W: {0 A1 n. F6 t' Q% l7 E7 s: ~) g7 L
### 遥控器不能用5 i. X* R! c- V6 @4 a
$ O" f`5 P8 E/ p& I, h; y应该也是驱动问题,不过只要usb口可以正常使用了,大不了用鼠标不用遥控就是,问题不大。% ]! i: A: X0 d) Z
8 W1 }+ l{0 G( c0 q3 T
7 Y- y: e& ^2 Dh# D