Andrew Huang 转载请注明作者及出处 http://bluedrum.cublog.cn
因为要帮学生的产品看一下telechip8902的adv7180的问题,此我系统了解一下telechip 8902这一款在平板电脑上用得很火的CPU。
一.telechip 8902的介绍
看这一款的CPU的介绍,内核采用 ARM1176JZF-S.跟s3c6410极为相似
主频为
多部模块没有S3C6410多,除了常见的UART/I2C/ADC/PWM/触摸屏/I2S/GPBS(这个可能是GSPI?),还以醒目的颜色标明支持红外接收和CAN。表明这个CPU的目标市场包括MP4和车载领域.
telechip的主要卖点就是视频的播放能力。从datasheet看硬件直接支持, H.263 /MPEG1/MPGE 2/MPEG4 /VC-1/RV (就是Real Video)以及 JPEG/H.264播放.
另外2D/3D加速支持OpenGL ES v2.0, v1.x
视频输出支持HDMI,LCD和TV。看资料还支持 DVB-H输出。输入支持CCIR-601/656和摄像头的
原厂网站 也有开源软件下载.选择technical support.再选择 technical Masterial 中再选择 opensource SW里面有内核和Android框架下载
二.Linux下开发环境安装
一个完整的系统包括
编译器
内核
根文件系统。
及应用测试程序
我分别整理一下。将所有的软件安装在/home/hxy/tc8902
从linux的BSP的目录结构来看,建议是这样的目录布局
/home/hxy/tc8902
|
+--kenrel (linux 2.6.28) #内核源码目录
|
+-- bootloader
| |
| +-- tcboot #bootloader 源码
|
+ -- toolchain #编译工具目录,(可选)
|
+--- drivers #以动态形式提供的驱动源码
|
+-- util #专用工具或开源工具
|
+-- ramdisk #ramdisk 格式的根文件系统,
在这里只有kernel和bootloader的相对路径不能改,因为在内核中用相对路径
arch/arm/mach-tcc8900/tcc_ckc_ctrl.c:42:58: error: ../../../../../bootloader/tcboot/include/ddr.h: No such file or directory
解压BSP源码.
主要bootloader/util/ramdisk目录.
2.1编译器
编译器直接是采用 codesourcery 的 4.3.2 .
缺省的路径是安装在 /opt/armv6/codesourcery/bin/arm-none-linux-gnueabi-gcc
但是因为考虑我有多个开发板开发环境安装在同一机器上,因此我的规划是将编译器安装在自己的开发目录.
将编译器在项目目录解压后 tar xvf armv6_compiler.tar.bz2.
将armv6/codesourcery 改名大家习惯 arm/4.3.2并安装在开发板目录 /home/hxy/tc8902目录下.
修改~/.bash_profile 将gcc路径增加PATH变量中.
在arm/4.3.2/bin目录下,把gcc名字改为常用的arm-linux-gcc
ln -s arm-none-linux-gnueabi-gcc arm-linux-gcc
ln -s arm-none-linux-gnueabi-ar arm-linux-ar
ln -s arm-none-linux-gnueabi-objdump arm-linux-objdump
ln -s arm-none-linux-gnueabi-g++ arm-linux-g++
ln -s arm-none-linux-gnueabi-readelf arm-linux-readelf
ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy
ln -s arm-none-linux-gnueabi-size arm-linux-size
ln -s arm-none-linux-gnueabi-ld arm-linux-ld
ln -s arm-none-linux-gnueabi-cpp arm-linux-cpp
ln -s arm-none-linux-gnueabi-gdb arm-linux-gdb
ln -s arm-none-linux-gnueabi-strings arm-linux-strings
ln -s arm-none-linux-gnueabi-nm arm-linux-nm
ln -s arm-none-linux-gnueabi-ranlib arm-linux-ranlib
ln -s arm-none-linux-gnueabi-as arm-linux-as
安装后注销用户重登录即可生效.运行 arm-linux-gcc -v 如果出现如下提示表示安装成功
- [root@android /]# arm-linux-gcc -v
-
Using built-in specs.
-
Target: arm-none-linux-gnueabi
-
Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl= --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin
-
Thread model: posix
-
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
2.2 编译bootloader
在bootloader/tcboot 生成Makefile
make tcc8900 KERNEL_START_OFFSET=0x300000 SDRAM_M_SIZE=256 REVISION=TCC_R_AX
修改编译器 把config.mk的编译器语句
CROSS_COMPILE = /opt/armv6/codesourcery/bin/arm-none-linux-gnueabi-
修改成
CROSS_COMPILE = arm-linux-
编译
make
成功后生成tcboot.rom 就是烧录文件
- arm-linux-objcopy --gap-fill=0xff -O srec tcboot tcboot.srec
-
arm-linux-objcopy --gap-fill=0xff -O binary tcboot tcboot.bin
-
-
[MK] tcboot.rom for TCC8900
-
image length: [0x000C40C0] (803008 byte)
-
second crc: [0x546DD635]
-
first crc: [0x07F0B334]
2.3 内核安装
我使用的是linux 2.6.28内核,项目目录在 /home/hxy/tcc8902/linux-2.6.28上
首先下载内核源码
1.首先下载原始内核 源码
wget
patch -p1 < patch-linux-2.6.28-100705-R0191B3463
3.拷贝配置文件
把arch/arm/configs/tcc8900_defconfig 拷到内核根目录下方便使用
在内核目录下将tcc8900_defconfig作为缺省配置
cp tcc8900_defconfig .config
4.打开内核配置菜单
检测系统类型是否为tc8900系统
make meuuconfig
修改Makefile的编译器的路径
CROSS_COMPILE ?= /home/hxy/tc8902/arm/4.3.2/bin/arm-none-linux-gnueabi-
5.编译内核和动态模块
make
成功后会提示
- OBJCOPY arch/arm/boot/Image
-
Kernel: arch/arm/boot/Image is ready
-
AS arch/arm/boot/compressed/head.o
-
GZIP arch/arm/boot/compressed/piggy.gz
-
AS arch/arm/boot/compressed/piggy.o
-
CC arch/arm/boot/compressed/misc.o
-
LD arch/arm/boot/compressed/vmlinux
-
OBJCOPY arch/arm/boot/zImage
-
Kernel: arch/arm/boot/zImage is ready
-
Building modules, stage 2.
-
MODPOST 4 modules
-
CC drivers/hid/hid-dummy.mod.o
-
LD [M] drivers/hid/hid-dummy.ko
-
CC drivers/net/tcc_dm9000.mod.o
-
LD [M] drivers/net/tcc_dm9000.ko
-
CC drivers/scsi/scsi_wait_scan.mod.o
-
LD [M] drivers/scsi/scsi_wait_scan.ko
-
CC drivers/usb/gadget/g_file_storage.mod.o
-
LD [M] drivers/usb/gadget/g_file_storage.ko
6.生成内核烧录文件
在内核目录下运行 ./tcc_mkrd.sh
2.4 生成根文件系统
在ramdisk目录执行 ./tcc_mk_rootfs.sh
- [root@android ramdisk]# ./tcc_mk_rootfs.sh
-
Input the filename of ramdisk. [default: ./ramdisk.rom] =>
-
Input the size of ramdisk. (unit: MByte) [default: 16 MByte] =>
-
Input the directory of rootimg. [default: ./rootimg] =>
-
## make the ramdisk with mnt directory
-
-
============ make ramdisk ============
-
16+0 records in
-
16+0 records out
-
16777216 bytes (17 MB) copied, 0.855896 seconds, 19.6 MB/s
-
mke2fs 1.39 (29-May-2006)
-
Filesystem label=
-
OS type: Linux
-
Block size=1024 (log=0)
-
Fragment size=1024 (log=0)
-
4096 inodes, 16384 blocks
-
819 blocks (5.00%) reserved for the super user
-
First data block=1
-
Maximum filesystem blocks=16777216
-
2 block groups
-
8192 blocks per group, 8192 fragments per group
-
2048 inodes per group
-
Superblock backups stored on blocks:
-
8193
-
-
Writing inode tables: done
-
Writing superblocks and filesystem accounting information: done
-
-
This filesystem will be automatically checked every 36 mounts or
-
180 days, whichever comes first. Use tune2fs -c or -i to override.
-
======================================
三.开发板固件安装
启动时tcboot的提示画面
- =============================================
-
tcboot ver 0.5 for TCC8900 Linux
-
Board ver TCC8900_WINCE_LINUX_DEMO
-
DATE:Oct 28 2011, TIME:17:11:04
-
=============================================
-
CHIP ID: 0x00000395770423C8
-
CLOCK: PLL0:540, PLL1:560, PLL2:468, PLL3:528, CPU:506, BUS:280
-
DDI:264, GRP:0, IOB:156, VBUS:0, VPU:0, SMU:117
-
FWDN: checking...
-
-
Press any key to enter shell mode.
-
-
-
=========================================
-
TcBoot Shell Menu
-
L/l - Loading Linux Kernel.
-
U/u - Updating Firmware from SD card.
-
=========================================
-
-
[TCBOOT]
阅读(6017) | 评论(3) | 转发(1) |