## 按
% O6 x9 ?3 b" a. e6 x9 ?5 ^. A; J" S$ o5 r# G! x: O* l
一开始,我是想试试看能不能借由原生linux解决魔盒伪1080输出的问题。毕竟国内厂商靠不住这件事人尽皆知,求人不如求己。现在新版魔盒已经出来了,这个问题原厂就更加不会管了。
`+ j3 d9 P0 K
3 W0 V- A. e6 C/ B9 Y目前debian可以在魔盒上跑起来了,但问题还是很多。首先是音频驱动存在问题,alsamixer显示找不到控制器,aplay不报错但电视机端也没有音频输出。其次是遥控和usb口也都无法使用。@9 y. N3 y- n& ~, [; k- Y
" v2 c& H( W9 C+ o
这些问题不解决,即使花很多功夫把xbmc编译出来也没有实用价值。而我最近事情有些多,暂时没办法继续搞下去了。写这张帖子是希望,如果有人对这个问题有兴趣,可以通过我的帖子节约一点时间,也算是回馈论坛了吧。6 e2 s( V$ d' l* n
# {3 }; g }8 ?. B* r U哈哈6014和1024255317给我提供了不少帮助,一并在此表示感谢。+ P9 ~; S2 j' H
o9 k; ~ U# t4 Q' L* P9 A' [4 j. K* N## UBOOT% j9 V/ Q D( n& S' j8 j) d
' h% I" f; X; U6 @( t因为我希望保留nand内的安卓系统,所以linux就只能安装在tf卡中。虽然有朝一日如果能研究出点成果,拆机并不是必须的步骤。但就目前而言,没有uart接口就看不到输出,没法折腾,所以拆机焊线就目前来说仍然是必须的。5 P. d! Z8 k6 c* t6 K( K. x
I, z2 r7 h2 u7 d* _
为了一张tf卡在两个系统中都派上用场,我把一张16G的tf卡为了两个区,第一个分区4G的fat32,剩余部分则格式化为ext3。
' Z. O% e' z; w) k8 _; |/ D4 B- |6 ]# j! J# w" g& F" U
想要启动时加载tf卡上根目录中名为uImage的内核文件,我们可以在uboot中这么做:
) g# t+ D- m8 S; ]- J8 X! g
mmcinfo
6 l, e# h* e) D# B, P8 k8 w
fatload mmc 0 ${loadaddr} uImage
( R( k g) q9 a' q; h( |
bootm0 \) ~4 D% v0 K/ i* B复制代码如果希望启动时默认加载tf卡上的linux内核,则可以这样做:
+ Y0 n( v9 P- q! b# q: L' g* p
setenv bootlnx 'mmcinfo; fatload mmc 0 ${loadaddr} uImage; bootm; '
$ t8 ^& {- |- o# b6 p4 n
setenv bootcmd 'run bootlnx'
2 }5 S' t9 U1 V- b
saveenv
! F. X# L+ N1 y: }: J复制代码另外还有个法子,可以在上电时通过狂按遥控上的菜单键加载tf卡上的系统:
7 c: @ s9 o2 h" Z
setenv bootlnx 'mmcinfo; fatload mmc 0 ${loadaddr} uImage; bootm; '
. g) ^; P+ V1 F+ T# [
setenv irremote_update 'if irkey 0x1f2d12e 500000 ;then run bootlnx; fi'
( m7 e) q- s/ h! A
saveenv8 s9 H& N& s, u/ G. s+ k3 h: u5 [复制代码关于uboot的更多内容,可以参考一下这张帖子:http://www.7po.com/thread-235366-1-1.html
2 ]$ O7 n) V3 s; p0 H
$ ?- [4 ]8 n( y1 _' M6 g## 内核
& ^. |6 ]* c3 ?
/ g6 P& I. x9 J! k; n- V& n4 K( }amlogic官方放出的内核以及驱动源码这里有:http://openlinux.amlogic.com:8000/download/ARM/- W0 k/ n, U7 F1 l2 j
/ s$ S$ J9 _5 I
不过直接用这里的代码虽然能够成功编译,但实际使用时有非常多的问题,所以我用的是wjb@github修改整理的版本。, _* p% `7 X4 m; V* q, x
1 N/ j6 R) W' L9 u. A. ~
编译内核使用的是ubuntu 12.04,安装必须的软件包什么的我就不废话了,具体编译过程大概是这样:
" [" l! z! f' P
sudo apt-get install gcc-arm-linux-gnueabihf
: [3 K2 R. U$ r* f% z
$ f8 h, x, h5 m+ b
git clone https://github.com/wjb/mx-common.git' f4 O! T4 d! i/ `
cd mx-common
- Z% T) Y* F% g0 t! V2 s( ?2 G
% Z) M. D7 l- y$ G( C
export CROSS_COMPILE=arm-linux-gnueabihf-x. ~3 n7 M. [* r7 `% K( X. U9 @
export ARCH=arm
/ h" r. @" {4 ^- i
make mrproper
$ M' A _! }7 L- l& Y' L
make meson6_g18_mx2_defconfig% M$ Q* d. \0 q; e+ J# ]4 w3 o& V
make menuconfig
! a9 ]! Y1 F4 D5 r! A" e2 m
make uImage -j4
5 I5 P P8 \% y7 o$ C
make modules -j46 c8 d$ C8 s$ q/ U# J! M
6 ^; J1 U( r! a" h
sudo cp arch/arm/boot/uImage /media/BOOT
* V7 @7 D8 ]! H% M# h; M
sudo make INSTALL_MOD_PATH=/media/AMLinux modules_install
" K9 U2 ~/ F& ^- j; M+ I8 V复制代码## Debian( P3 H Q& {# `4 h1 j* W
8 k% p$ [1 C/ r8 r4 Q! v
Ubuntu和Debian都提供了ARM支持,下面的方法两个发行版都适用。不过只用命令行的话,Ubuntu远不如Debian好用,再加上stable的Debian软件包太老,所以下面安装的是sid的Debian。
, ~, t) z) D% y. w1 E Z0 }, Q# b7 [& w
! u/ A" V( B7 p4 {, x
sudo apt-get install qemu-arm-static debootstrap
% @( L! N: u R, ], L4 I Rmkdir debian-armhf-sid
4 c& {! J8 w3 Bsudo debootstrap --foreign --arch armhf sid debian-armhf-sid http://ftp.tw.debian.org/debian/
$ t) z: c9 n1 t' z: A b! f u! Lsudo cp /usr/bin/qemu-arm-static debian-armhf-sid/usr/bin/
6 ?0 l7 H" o' isudo chroot debian-armhf-sid /debootstrap/debootstrap --second-stage
2 k* B( h6 g8 z' osudo chroot debian-armhf-sid
# t2 ^: N- q5 Z1 G: L
* n8 V: a9 R0 `3 d, ^3 w/ {8 a7 F* Y- s! \' h1 M
qemu-arm-static很不错,可以直接在PC上chroot进ARM系统,相当方便。
! u5 t* B6 v2 `# v$ ` i' G+ J Z* m9 ?+ e0 a) L' L
然后就是一些基本设置:$ q1 ]" j5 i( M7 p
* `3 v$ u/ _1 _* w
# K; t( C" B9 {: M1 R
passwd
3 |6 E* }# D7 A. r8 {" gecho AMLinux > /etc/hostname% c1 l% @( z' K5 p5 r) G
echo deb http://ftp.tw.debian.org/debian sid main contrib non-free >> /etc/apt/sources.list1 G! U, e# s* ]8 K
apt-get update2 k& X$ f9 r: i( l9 r" d
apt-get install locales
) g; {/ v% s2 B8 e" X/ ddpkg-reconfigure locales
( k; P6 @0 R1 j+ Hapt-get install wireless-tools wpasupplicant
5 h7 q& e$ J) i% ^, \mknod -m 660 /dev/ttyS0 c 4 645 c8 W0 h4 T4 \' q2 ]
1 G* O. H8 ?- Q- k; E; }0 O. H0 q6 S& S
编辑/etc/inittab,将ttyS0所在行改为:U/ W# p! x4 D. t
" [, B. f/ O6 M# V( ^ V0 e
+ r8 `, }! e. T* Q: F: `T0:2345:respawn:/sbin/agetty -L ttyS0 115200 vt100
0 s/ l( R4 b# C+ A$ ^, O) d# r
4 w5 O @6 t1 @/ c4 _, R6 b& ~. Z+ H a3 q6 C5 [
完成后cp -a将debian-armhf-sid复制到TF卡的ext3分区,到这里该TF卡就可以在魔盒中成功启动了。, X0 H4 y, O( v5 Z2 t! n
8 y3 E8 ]* C: k+ v
## 现存问题
4 I) v9 }& y# b# @: \: u, V" M* o( {( L* {% g: K! G. l
### 有线网卡的mac地址问题
* l! C; f% f. G2 v% X9 t
9 h9 L$ m9 L8 }+ x$ N在启动linux时,log里有一句未配置mac地址,使用随机地址的信息。进入linux后重启进入android,系统会自动运行一个叫MiptAutoTestForAli-10030的程序。虽然看起来很吓人,但其实只要在这个程序中选择写入随机mac地址再退出,就可以正常使用android系统了。
% K: C, c* d( ?! l6 c/ k- n' D& D! E1 P! ?/ j- @0 ~# l- H
这有可能是linux下的网卡驱动不完善导致的,不过也不是什么大问题就是。
) y5 I2 M' j8 z6 ` @* b
" @$ m# F6 v6 y: ], ~### usb口无法使用
" Z' C7 z; f1 v& o( c
8 m( V- T5 Q# y* s3 y9 K i; _启动信息看不出什么问题,usb相关内容都有也都正常,但不管是启动前还是启动后插入usb设备,系统都认不出来。
4 ^6 p8 t- A5 p* b7 b# X' W7 U9 Y% ^
# c( Q% O% ]+ n$ Z### 音频输出$ B2 n: z( ^0 k
~) ~6 Z7 B- x# N, R$ s% zamlogic虽然也用了alsa,但似乎没有提供/dev/dsp一类标准接口。在android中我用optware安装了alsa相关工具,同样有alsamixer显示无控制器,aplay无法输出的问题,所以这究竟是怎么回事还有待研究。5 o0 f9 U0 i, y1 @( M) Q. B
( L7 Y i1 h$ j; j### 遥控器不能用! q: K9 T2 u# n& x8 b$ Q
3 |5 q( m# _2 m应该也是驱动问题,不过只要usb口可以正常使用了,大不了用鼠标不用遥控就是,问题不大。% V) n; H1 i0 H) q; c
6 {* I( ~6 d7 ^# v
. }/ O- ^! e! \4 ]