forked from aosp-mirror/kernel_common
-
Notifications
You must be signed in to change notification settings - Fork 7
/
README
221 lines (133 loc) · 7.14 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
(These are notes about the WM8505 kernel port, please see README.linux
for the original Linux kernel README.)
* This is based on kernel 2.6.29 sources released by VIA
(http://lists.gpl-violations.org/pipermail/legal/2010-July/002204.html).
* You may also want to see http://gitorious.org/linux-on-via-vt8500
which is a clean kernel implementation for VT8500/WM8505, written
largely from scratch. However, at time of writing the clean kernel
supports less WM8505 hardware than this kernel does.
* These sources currently come with one sourceless binary object file
(for SD card support.)
* This kernel will not work on VT8500-based machines. WM8505 only.
******** PREREQUISITES ********
- A host running Linux to build from. You may be able to build from
BSD/OSX as well, I don't know.
- An appropriate ARM cross-compiler toolchain. Make sure it has EABI support.
Recommended/tested choices are Emdebian for Debian/Ubuntu hosts, or
the Android NDK toolchain for other hosts (see below.) Problems have
been reported using CodeSourcery.
- The mkimage tool installed on your host. On Debian/Ubuntu, the
package to install is 'uboot-mkimage'
******** INSTALLING A TOOLCHAIN ********
**** Emdebian Option
To install Emdebian on an Debian or Ubuntu host, follow the steps
under "Get the Binaries" on emdebian wiki:
http://wiki.debian.org/EmdebianToolchain#Getthebinaries (you don't
need all those packages listed there to just compile a kernel, but
they don't hurt.)
Before building, you will need to set an environment variable for
your cross-compiler:
export CROSS_COMPILE=arm-linux-gnueabi-
(you can alternately supply this on the command-line to make, if you desire.)
**** Android NDK Option
To install the Android NDK, first download from
http://developer.android.com/sdk/ndk/index.html
Then untar it to your chosen install point and add the prebuilt
binary toolchain to your path. The steps will be something like:
cd /usr/local
sudo tar jxvf ~/Downloads/android-ndk-r5b-linux-x86.tar.bz2
sudo chmod -R +rX android-ndk-r5b/
export PATH="$PATH:`pwd`/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin"
You will probably want to add the last line above to your .bashrc or
similar, so the toolchain is always in your PATH
You will also need to set the cross-compiler environment variable:
export CROSS_COMPILE=arm-eabi-
(you can alternately supply this on the command-line to make, if you desire.)
******** CONFIGURE YOUR FIRST KERNEL ********
After you have a toolchain, you can configure a WM8505 kernel with a
default config (defconfig) as follows:
For Eken M001 kernel suitable for Android:
make eken_m001_android_defconfig ARCH=arm
For Eken M001 kernel more suitable for Debian:
make eken_m001_debian_defconfig ARCH=arm
(Other WM8505 tablets/netbooks can probably use the M001 config as well.)
******** BUILD YOUR FIRST KERNEL ********
After you have a config, you can build a kernel:
make via_obj uImage modules ARCH=arm
If compilation succeeds, the kernel image will be at arch/arm/uImage
(this file is equivalent to the uzImage.bin file used in common WM8505
boot environments, you can copy it over the top to change the kernel
which is installed/booted from SD.)
To install the built kernel modules somewhere, run:
make modules_install ARCH=arm INSTALL_MOD_PATH=/some/staging/path
******** FURTHER CONFIGURATION **********
You can edit the current config with
make menuconfig ARCH=arm
As well as the two recommended defconfigs, there are some older
configurations available under arch/arm/configs. These are not known
to work, and are mostly for comparison/information purposes only:
* arch/arm/configs/android_wm8505_config
* arch/arm/configs/wmt_defconfig
These two came as-is with the source tarball.
* arch/arm/configs/wm8505_initial_config
This file was the .config that came as-is the source tarball (different to the
above two configs.)
* arch/arm/configs/eken_m001_factory_configuration
This is a dump of /proc/config.gz on a factory Eken M001 kernel (different again.)
******** OTHER BUILDING NOTES ********
* The via_obj target is a custom VIA target to copy the mmc_atsmb.o
file into the source tree before building. VIA/Wondermedia have not
released this one source file.
* If you are building for Android, and you want to use some of the
binary-only kernel modules that came with WM8505 Android by default
(or vice-versa if you want to use a new module with an old kernel),
then you need to force the kernel revision so they will load. This is
a horrible hack, but even WM seem to do it in their Android releases.
Do this by overriding the KERNELRELEASE make variable on the command line
as KERNELRELEASE=2.6.29-00236-g4f8dbbb-dirty - ie:
make uImage modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- KERNELRELEASE=2.6.29-00236-g4f8dbbb-dirty
**** u-boot scripts
U-boot boot scripts for SD card booting/installing are saved at the path
'script/scriptcmd' on SD card.
To read a scriptcmd:
tail -c +72 scriptcmd
To write a scriptcmd:
mkimage -A arm -O linux -T script -C none -a 1 -e 0 -n "script image" -d cmd scriptcmd
(Where 'cmd' is your source scriptcmd script.)
******* kernel arguments ******
Scriptcmd has a line for kernel args:
setenv bootargs mem=112M root=/dev/mmcblk0p2 lcdid=1 console=ttyS0,115200n
Relevant args:
* mem=112M
is also mem=109M on non-Android boots. Suspect extra 3M is video memory?!?
* console=ttyS0,115200n
gives you kernel console on serial. If you're building for Debian or
any other non-Android userland then you may want to remove this, and enable
framebuffer console in configuration (this is enabled already in Debian
defconfig.)
* lcdid=1 enables VOUT to LCD on tablets. Some other machines
(netbooks?) use VT1632 which is the default if lcdid is not set (in
this case, you won't see any video on a tablet.)
****** WiFi Driver ******
This tree contains the rt2870sta kernel module, backported from kernel
2.6.35. I have had mixed success with this driver, you may also want
to try Ralink's OEM source release driver (especially on Android.)
The WiFi driver that ships with WM8505 Android is a custom one with
vendor-specific patches to enable the GPIO and load the firmware. If
you go with a standard driver, you will need to perform these
functions yourself:
- Run these commands to turn on the Signal GPIO that powers the USB
stick inside the Eken. We'll probably come up with something better
eventually, but for now:
echo out > /sys/class/gpio/gpio2/direction
echo 1 > /sys/class/gpio/gpio2/value
modprobe rt2870sta
- Install a firmware file. To get a firmware file in debian, you
can install firmware-ralink from non-free. Alternatively, download
the USB firmwares from http://www.ralink.com.tw/support.php?s=2
The rt2870.bin firmware will do as long as it's recent.
You can choose to load the firmware at runtime, or to compile it
directly into the kernel. Choosing to compile it in is currently the
path of least resistance for most userlands (look in menuconfig
under (under Device Drivers -> Generic Driver Options -> Include
in-kernel firmware blobs...)