系统:ubuntu 10.04.4
单板:ok6410
编译器:arm-none-linux-gnueabi-
搭建开发环境详见ubuntu 10.04.4开发环境配置。
目标:
一.配置 编译android-2.6.29,放到OK6410上,板子串口正常输出
二.移植DM9000网卡驱动,配置内核,支持nfs挂载网络文件系统
一.配置 编译android-2.6.29,放到OK6410上,板子串口正常输出
1.获取交叉编译链 http://code.google.com/p/smp-on-qemu/downloads/list 选择arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2并下载。然后在ubuntu下直接解压即可
2.git下载内核源码android-2.6.29
change@change:~$ mkdir android
change@change:~/android$ git clonehttps://android.googlesource.com/kernel/goldfish.git
Initialized empty Git repository in /home/change/android/goldfish/.git/
remote: Counting objects: 41021, done
remote: Finding sources: 100% (114/114)
remote: Getting sizes: 100% (70/70)
remote: Compressing objects: 100% (311571/311571)
Receiving objects: 100% (2442756/2442756), 499.75 MiB | 901 KiB/s, done.
remote: Total 2442756 (delta 2048893), reused 2442724 (delta 2048890)
Resolving deltas: 100% (2049059/2049059), done.
显示100%之后则表示同步完成。此时goldfish下的所有内核版本的源码都已同步完成
设定默认使用版本
进入到goldfish目录下,使用如下命令查看所有可用版本名称。
change@change:~/android$ cd goldfish/
change@change:~/android/goldfish$ git branch -a
我的系统显示如下:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.4
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
“*”指代的当前目录下默认的版本。设定“android-goldfish-2.6.29”为默认,则可以在终端中输入如下命令:
git checkout -b android-2.6.29 origin/android-goldfish-2.6.29
-b后面的android-2.6.29只是给后面的内核源码版本起了个自己定义的名字,方便自己查看而已,也可以不定义,不定义就会使用默认名称。此时,查看goldfish下的目录即为“android-goldfinsh-2.6.29”版本的模拟器内核源码。在goldfish目录下使用如下命令进行查看当前内核版本的名称。
change@change:~/android/goldfish$ git checkout -b android-2.6.29 origin/android-goldfish-2.6.29
Checking out files: 100% (26821/26821), done.
Branch android-2.6.29 set up to track remote branch android-goldfish-2.6.29 from origin.
Switched to a new branch 'android-2.6.29'
change@change:~/android/goldfish$ git branch
* android-2.6.29
master
下载的android-2.6.29代码如下:
change@change:~/android/goldfish$ ls
arch CREDITS drivers include Kbuild MAINTAINERS net samples sound
block crypto firmware init kernel Makefile README scripts usr
COPYING Documentation fs ipc lib mm REPORTING-BUGS security virt
change@change:~/android/goldfish$
3.修改顶部Makefile:193
ARCH ?= arm
CROSS_COMPILE ?= /home/change/tools/arm-2009q3//bin/arm-none-linux-gnueabi-
4.配置
make s3c6400_defconfig
5.编译make uImage
make uImage
Image Name: Linux-2.6.29-gcb06bef-dirty
Created: Fri Jan 18 14:24:35 2013
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 938176 Bytes = 916.19 kB = 0.89 MB
Load Address: 50008000
Entry Point: 50008000
Image arch/arm/boot/uImage is ready
编译过程比较顺利,没有报错
SMDK6410 # set bootcmd 'nand read 0x50000000 0x100000 0x300000;bootm 0x50000000'
SMDK6410 # boot
Unknown command 'nand' - try 'help'
## Booting kernel from Legacy Image at 50000000 ...
Image Name: Linux-2.6.29-ge3d684d-dirty
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 943040 Bytes = 920.9 KiB
Load Address: 50008000
Entry Point: 50008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
SMDK6410 #tftp 0x50000000 uImage
dm9000 i/o: 0x18000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:0c:29:4d:e4:f4
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 172.16.1.132; our IP address is 172.16.1.111
Filename 'uImage'.
Load address: 0x50000000
Loading: #################################################################
done
Bytes transferred = 943104 (e6400 hex)
SMDK6410 # md 0x50000000
50000000: 56190527 3d367e35 d0678651 c0630e00 '..V5~6=Q.g...c.
50000010: 00800050 00800050 15e75322 00020205 P...P..."S......
50000020: 756e694c 2e322d78 39322e36 3365672d Linux-2.6.29-ge3
50000030: 34383664 69642d64 00797472 00000000 d684d-dirty.....
50000040: e1a00000 e1a00000 e1a00000 e1a00000 ................
50000050: e1a00000 e1a00000 e1a00000 e1a00000 ................
50000060: ea000002 016f2818 00000000 000e63c0 .....(o......c..
50000070: e1a07001 e1a08002 e10f2000 e3120003 .p....... ......
50000080: 1a000001 e3a00017 ef123456 e10f2000 ........V4... ..
50000090: e38220c0 e121f002 00000000 00000000 . ....!.........
500000a0: e28f00d0 e890307e e0500001 0a00000a ....~0....P.....
500000b0: e0855000 e0866000 e08cc000 e0822000 .P...`....... ..
500000c0: e0833000 e08dd000 e5961000 e0811000 .0..............
500000d0: e4861004 e156000c 3afffffa e3a00000 ......V....:....
500000e0: e4820004 e4820004 e4820004 e4820004 ................
500000f0: e1520003 3afffff9 eb000028 e1a0100d ..R....:(.......
SMDK6410 # nand read 0x50000000 0x100000 0x300000
NAND read: device 0 offset 0x100000, size 0x300000
realpage value:1023
page value:1023
ret value:0
3145728 bytes read: OK
SMDK6410 # md 0x50000000
50000000: 56190527 3d367e35 d0678651 c0630e00 '..V5~6=Q.g...c.
50000010: 00800050 00800050 15e75322 00020205 P...P..."S......
50000020: 756e694c 2e322d78 39322e36 3365672d Linux-2.6.29-ge3
50000030: 34383664 69642d64 00797472 00000000 d684d-dirty.....
50000040: e1a00000 e1a00000 e1a00000 e1a00000 ................
50000050: e1a00000 e1a00000 e1a00000 e1a00000 ................
50000060: ea000002 016f2818 00000000 000e63c0 .....(o......c..
50000070: e1a07001 e1a08002 e10f2000 e3120003 .p....... ......
50000080: 1a000001 e3a00017 ef123456 e10f2000 ........V4... ..
50000090: e38220c0 e121f002 00000000 00000000 . ....!.........
500000a0: e28f00d0 e890307e e0500001 0a00000a ....~0....P.....
500000b0: e0855000 e0866000 e08cc000 e0822000 .P...`....... ..
500000c0: e0833000 e08dd000 e5961000 e0811000 .0..............
500000d0: e4861004 e156000c 3afffffa e3a00000 ......V....:....
500000e0: e4820004 e4820004 e4820004 e4820004 ................
500000f0: e1520003 3afffff9 eb000028 e1a0100d ..R....:(.......
SMDK6410 #
放到内存读出的数据也一样,这个问题感觉怪