Compile kernel from leaked Telechips Linux BSP

Content

  1. BSP version
  2. Hardware support (HSG X5A)
  3. Preparing ARMv6 toolchain
  4. How to compile bootloader (tcboot)
  5. How to compile kernel
  6. FWDN V6 & V7
  7. Serial output

1. BSP version

There are several versions of Telechips Linux BSP and documentation floating around the internet. The time range is from the end of 2009 till mid-2010. Two most recent are these:

You can find similar howto on 99pad.com, made by gbk18030.

2. Hardware support (HSG X5A)

3. Preparing ARMv6 toolchain

Copy armv6_codesourcery.tar.bz2 to /opt/ directory
tar -jxvf armv6_codesourcery.tar.bz2
export PATH=/opt/armv6/codesourcery/bin:$PATH
Check version
arm-none-linux-gnueabi-gcc -v
Install other needed tools
sudo apt-get install libncurses5-dev libqt3-mt-dev qt3-dev-tools g++
Download original linux-2.6.28.tar.bz2 kernel.

4. How to compile bootloader (tcboot)

tcboot bootloader is a predecessor of lkboot which is commonly used in Telechips Android ROMs as lk.rom. In contrast to lkboot, tcboot seems not to display any picture at boot (only when on-board FWDN switch is ON, but the LCD configuration is not working on HSG X5A tablet).

Go to bootloader/tcboot/ directory
make distclean
make tcc8900 KERNEL_START_OFFSET=0x300000 SDRAM_M_SIZE=256 REVISION=TCC_R_AX
nano include/config.h
#define FCPU_720MHZ_INCLUDE
#define FMBUS_360MHZ_INCLUDE
nano include/ddr.h
#define DRAM_TYPE3
Note: Not needed for newer LINUX_BSP_100409-R0190B3034
make

You will get tcboot.rom (use FWDN tool according to version of BSP, in other case you will get error message).

5. How to compile Kernel

Unpack & patch kernel

tar -xjvf linux-2.6.28.tar.bz2
cd linux-2.6.28
patch -p1 < ../patch-linux-2.6.28-*

Compile kernel

make tcc8900_defconfig
make menuconfig
make
chmod +x tcc_mkrd.sh
./tcc_mkrd.sh

You will get linux.rom.

6. FWDN V6 & V7

FWDN_V6

FWDN_V7

7. Serial output

LINUX_BSP_100205-R0170B2750 (tcboot.rom needs FWDN_V6)
=============================================                                   
    TcBoot Ver 0.5 for TCC8900 Linux                                            
    Board Ver TCC8900_WINCE_LINUX_DEMO                                          
    DATE:Feb 20 2011, TIME:16:13:37                                             
=============================================                                   
CHIP ID: 0x000003178C53C830                                                     
CLOCK: PLL0:720, PLL1:540, PLL2:468, PLL3:528, CPU:720, BUS:360                 
       DDI:264, GRP:0, IOB:156, VBUS:0, VPU:0, SMU:176                          
[NAND        ] [BClk 156MHZ][1Tick 65][RE-S:0,P:5,H:2][WR-S:0,P:3,H:2][COM-S:2,]
[NAND        ] [NB Area:4MB][DT Area:3796MB][HD Area0:34MB]                     
FWDN: checking...                                                               
Loading...                                                                      
kernel = 0x400000, ramdisk = 0x1000000                                          
Load Ok! Jump to 0x40300000 (0xEA000016)                                        
                                                                                
Linux version 2.6.28 (georg77@Ubuntu) (gcc version 4.3.2 (Sourcery G++ Lite 2001
CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387f      
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache            
Machine: Telechips TCC8900 Demo Board                                           
Warning: bad configuration page, trying to continue                             
Memory policy: ECC disabled, Data cache writeback                               
create_mapping:0x40200000->0xc0000000(0x7100000)                                
create_mapping:0x402e9000->0xffff0000(0x1000)                                   
create_mapping:0xf0000000->0xf0000000(0x100000)                                 
create_mapping:0xf0100000->0xf0100000(0x100000)                                 
create_mapping:0xf0200000->0xf0200000(0x100000)                                 
create_mapping:0xf0300000->0xf0300000(0x100000)                                 
create_mapping:0xf0400000->0xf0400000(0x100000)                                 
create_mapping:0xf0500000->0xf0500000(0x100000)                                 
create_mapping:0xf0600000->0xf0600000(0x100000)                                 
create_mapping:0xf0700000->0xf0700000(0x100000)                                 
create_mapping:0x10000000->0xeff00000(0x100000)                                 
Serial Number: 000003178c53c830                                                 
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 28702      
Kernel command line: root=/dev/ram rw initrd=0x40700000,0x1000000 init=/linuxrcM
tcc8900_irq_init                                                                
PID hash table entries: 512 (order: 9, 2048 bytes)                              
 ### CORE CLOCK (720000000 Hz), BUS CLOCK (360000000 Hz) ###                    
Console: colour dummy device 80x30                                              
console [ttySAC0] enabled                                                       
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)                  
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)                    
_etext:0xc0498000, _text:0xc0120000, _end:0xc04f7a60, __data_start:0xc0498000, 0
Memory: 113MB = 113MB total                                                     
Memory: 94036KB available (3552K code, 382K data, 128K init)                    
SLUB: Genslabs=12, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1         
Calibrating delay loop... 719.25 BogoMIPS (lpj=3596288)                         
Mount-cache hash table entries: 512                                             
CPU: Testing write buffer coherency: ok                                         
net_namespace: 288 bytes                                                        
NET: Registered protocol family 16                                              
attached TCC adc driver                                                         
SCSI subsystem initialized                                                      
usbcore: registered new interface driver usbfs                                  
usbcore: registered new interface driver hub                                    
usbcore: registered new device driver usb                                       
NET: Registered protocol family 2                                               
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)                  
TCP established hash table entries: 4096 (order: 3, 32768 bytes)                
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)                       
TCP: Hash tables configured (established 4096 bind 4096)                        
TCP reno registered                                                             
NET: Registered protocol family 1                                               
initrd_start:0xc0500000, initrd_end:0xc1500000                                  
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like d
Freeing initrd memory: 16384K                                                   
Telechips Dynamic Power Management.                                             
NetWinder Floating Point Emulator V0.97 (double precision)                      
fuse init (API version 7.10)                                                    
JFS: nTxBlock = 863, nTxLock = 6911                                             
msgmni has been set to 215                                                      
alg: No test for stdrng (krng)                                                  
io scheduler noop registered                                                    
io scheduler anticipatory registered                                            
io scheduler deadline registered                                                
io scheduler cfq registered (default)                                           
i2c /dev entries driver                                                         
tcc-i2c tcc-i2c: i2c-0: I2C adapter                                             
tcc-tsif: spi1 init                                                             
fb[0]::map_video_memory: dma=47300000 cpu=c8000000 size=01000000                
fb0: tccfb frame buffer device                                                  
fb[1]::map_video_memory: dma=48300000 cpu=c9800000 size=00400000                
fb1: tccfb frame buffer device                                                  
fb[2]::map_video_memory: dma=48700000 cpu=ca000000 size=00400000                
fb2: tccfb frame buffer device                                                  
tcc_intr: init (ver 2.1)                                                        
bl: init                                                                        
tcc_pwm: init (ver 0.1)                                                         
tcc_pwrkey: init                                                                
tcc proc filesystem initialised                                                 
tcc8900-uart.0: tcc-uart0 at MMIO 0xf0532000 (irq = 64) is a uart0              
tcc8900-uart.1: tcc-uart1 at MMIO 0xf0532100 (irq = 65) is a uart1              
brd: module loaded                                                              
loop: module loaded                                                             
TRACE: DPM is now installed                                                     
Driver 'sd' needs updating - please use bus_type methods                        
Driver 'sr' needs updating - please use bus_type methods                        
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver                          
tcc-ohci tcc-ohci: TCC OHCI                                                     
tcc-ohci tcc-ohci: new USB bus registered, assigned bus number 1                
tcc-ohci tcc-ohci: irq 49, io mem 0xf0500000                                    
usb usb1: configuration #1 chosen from 1 choice                                 
hub 1-0:1.0: USB hub found                                                      
hub 1-0:1.0: 1 port detected                                                    
Initializing USB Mass Storage driver...                                         
usbcore: registered new interface driver usb-storage                            
USB Mass Storage support registered.                                            
dwc_otg: version 2.60a 22-NOV-2006                                              
dwc_otg dwc_otg.0: DWC OTG Controller                                           
dwc_otg dwc_otg.0: new USB bus registered, assigned bus number 2                
dwc_otg dwc_otg.0: irq 48, io mem 0x00000000                                    
usb usb2: configuration #1 chosen from 1 choice                                 
hub 2-0:1.0: USB hub found                                                      
hub 2-0:1.0: 1 port detected                                                    
mice: PS/2 mouse device common for all mice                                     
Telechips Keypad Driver                                                         
input: telechips keypad as /class/input/input0                                  
Telechips Touchscreen driver, (c) 2009 Telechips                                
tcc-ts got loaded successfully.                                                 
input: tcc-ts as /class/input/input1                                            
Telechips Remote Controller Driver Init                                         
input: telechips remote controller as /class/input/input2                       
Set ID to device mode                                                           
TCC RTC, (c) 2009, Telechips                                                    
tcc-rtc tcc-rtc: rtc core: registered tcc-rtc as rtc0                           
tcc-sdhc0: init                                                                 
ID change ISR : Device                                                          
hub 2-0:1.0: over-current change on port 1                                      
usbcore: registered new interface driver usbhid                                 
usbhid: v2.6:USB HID core driver                                                
Advanced Linux Sound Architecture Driver Version 1.0.18rc3.                     
ASoC version 0.13.2                                                             
TCC Board probe [tcc_board_probe]                                               
WM8731 Audio Codec 0.13                                                         
 wm8731 i2c_address [0x1A]                                                      
== alsa-debug == tcc_pcm_preallocate_dma_buffer size [65536]                    
== alsa-debug == tcc_pcm_preallocate_dma_buffer size [65536]                    
asoc: WM8731 <-> tcc-i2s mapping ok                                             
== alsa-debug == tcc_pcm_preallocate_dma_buffer size [65536]                    
asoc: IEC958 <-> tcc-spdif mapping ok                                           
ALSA device list:                                                               
  #0: tccx_board (WM8731)                                                       
TCP cubic registered                                                            
NET: Registered protocol family 17                                              
RPC: Registered udp transport module.                                           
RPC: Registered tcp transport module.                                           
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5         
tcc-rtc tcc-rtc: hctosys: invalid date/time                                     
RAMDISK: Couldn't find valid RAM disk image starting at 0.                      
UDF-fs: No partition found (1)                                                  
List of all partitions:                                                         
No filesystem could mount root, tried:  ext3 ext2 cramfs vfat iso9660 romfs fuss
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
LINUX_BSP_100409-R0190B3034 (tcboot.rom needs FWDN_V7)
=============================================                                   
    tcboot ver 0.5 for TCC8900 Linux                                            
    Board ver TCC8900_WINCE_LINUX_DEMO                                          
    DATE:Feb 21 2011, TIME:21:36:51                                             
=============================================                                   
CHIP ID: 0x000003178C53C830                                                     
CLOCK: PLL0:720, PLL1:560, PLL2:468, PLL3:528, CPU:720, BUS:360                 
       DDI:264, GRP:0, IOB:156, VBUS:0, VPU:0, SMU:176                          
[NAND        ] [PORT CONFIG - CS[0, 1] [NAND Data Port: GPIO_B Hw4 ~ Hw11]      
[NAND        ] [BClk 156MHZ][1Tick 65][RE-S:0,P:5,H:2][WR-S:0,P:3,H:2][COM-S:2,]
[NAND        ] [NB Area:4MB][DT Area:3800MB][HD Area0:32MB]                     
FWDN: checking...                                                               
Loading...                                                                      
kernel = 0x400000, ramdisk = 0x1000000                                          
Load Ok! Jump to 0x40300000 (0xEA000016)                                        
                                                                                
Linux version 2.6.28 (georg77@Ubuntu) (gcc version 4.3.2 (Sourcery G++ Lite 2001
CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387f      
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache            
Machine: Telechips TCC8900 Demo Board                                           
Warning: bad configuration page, trying to continue                             
Memory policy: ECC disabled, Data cache writeback                               
create_mapping:0x40200000->0xc0000000(0x7100000)                                
INITRD: 0x40700000+0x01000000 overlaps in-use memory region - disabling initrd  
create_mapping:0x402e9000->0xffff0000(0x1000)                                   
create_mapping:0xf0000000->0xf0000000(0x100000)                                 
create_mapping:0xf0100000->0xf0100000(0x100000)                                 
create_mapping:0xf0200000->0xf0200000(0x100000)                                 
create_mapping:0xf0300000->0xf0300000(0x100000)                                 
create_mapping:0xf0400000->0xf0400000(0x100000)                                 
create_mapping:0xf0500000->0xf0500000(0x100000)                                 
create_mapping:0xf0600000->0xf0600000(0x100000)                                 
create_mapping:0xf0700000->0xf0700000(0x100000)                                 
create_mapping:0x10000000->0xeff00000(0x100000)                                 
Serial Number: 000003178c53c830                                                 
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 28702      
Kernel command line: root=/dev/ram rw initrd=0x40700000,0x1000000 init=/linuxrcM
tcc8900_irq_init                                                                
PID hash table entries: 512 (order: 9, 2048 bytes)                              
 ### CORE CLOCK (720000000 Hz), BUS CLOCK (360000000 Hz) ###                    
Console: colour dummy device 80x30                                              
console [ttySAC0] enabled                                                       
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)                  
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)                    
_etext:0xc04a1000, _text:0xc0121000, _end:0xc0501700, __data_start:0xc04a2000, 0
Memory: 113MB = 113MB total                                                     
Memory: 110392KB available (3584K code, 381K data, 132K init)                   
SLUB: Genslabs=12, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1         
Calibrating delay loop... 719.25 BogoMIPS (lpj=3596288)                         
Mount-cache hash table entries: 512                                             
CPU: Testing write buffer coherency: ok                                         
net_namespace: 288 bytes                                                        
NET: Registered protocol family 16                                              
attached TCC adc driver                                                         
SCSI subsystem initialized                                                      
usbcore: registered new interface driver usbfs                                  
usbcore: registered new interface driver hub                                    
usbcore: registered new device driver usb                                       
NET: Registered protocol family 2                                               
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)                  
TCP established hash table entries: 4096 (order: 3, 32768 bytes)                
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)                       
TCP: Hash tables configured (established 4096 bind 4096)                        
TCP reno registered                                                             
NET: Registered protocol family 1                                               
Telechips Dynamic Power Management.                                             
NetWinder Floating Point Emulator V0.97 (double precision)                      
fuse init (API version 7.10)                                                    
msgmni has been set to 215                                                      
alg: No test for stdrng (krng)                                                  
io scheduler noop registered                                                    
io scheduler anticipatory registered                                            
io scheduler deadline registered                                                
io scheduler cfq registered (default)                                           
i2c /dev entries driver                                                         
tcc-i2c tcc-i2c: i2c-0: I2C adapter                                             
tcc-tsif1: init                                                                 
fb[0]::map_video_memory: dma=47300000 cpu=c8000000 size=01000000                
fb0: tccfb frame buffer device                                                  
fb[1]::map_video_memory: dma=48300000 cpu=c9800000 size=00400000                
fb1: tccfb frame buffer device                                                  
fb[2]::map_video_memory: dma=48700000 cpu=ca000000 size=00400000                
fb2: tccfb frame buffer device                                                  
tcc_intr: init (ver 2.1)                                                        
bl: init                                                                        
tcc_pwm: init (ver 0.1)                                                         
tcc_pwrkey: init                                                                
tcc proc filesystem initialised                                                 
tcc_tsif_parallel_init : dev-name : tcc-tsif-parallel, tsif0 & dma0-0 use       
tcc8900-uart.0: tcc-uart0 at MMIO 0xf0532000 (irq = 64) is a uart0              
tcc8900-uart.1: tcc-uart1 at MMIO 0xf0532100 (irq = 65) is a uart1              
brd: module loaded                                                              
loop: module loaded                                                             
TRACE: DPM is now installed                                                     
Driver 'sd' needs updating - please use bus_type methods                        
Driver 'sr' needs updating - please use bus_type methods                        
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver                          
tcc-ohci tcc-ohci: TCC OHCI                                                     
tcc-ohci tcc-ohci: new USB bus registered, assigned bus number 1                
tcc-ohci tcc-ohci: irq 49, io mem 0xf0500000                                    
usb usb1: configuration #1 chosen from 1 choice                                 
hub 1-0:1.0: USB hub found                                                      
hub 1-0:1.0: 1 port detected                                                    
Initializing USB Mass Storage driver...                                         
usbcore: registered new interface driver usb-storage                            
USB Mass Storage support registered.                                            
dwc_otg: version 2.60a 22-NOV-2006                                              
dwc_otg dwc_otg.0: DWC OTG Controller                                           
dwc_otg dwc_otg.0: new USB bus registered, assigned bus number 2                
dwc_otg dwc_otg.0: irq 48, io mem 0x00000000                                    
usb usb2: configuration #1 chosen from 1 choice                                 
hub 2-0:1.0: USB hub found                                                      
hub 2-0:1.0: 1 port detected                                                    
mice: PS/2 mouse device common for all mice                                     
Telechips Keypad Driver                                                         
input: telechips keypad as /class/input/input0                                  
Telechips Touchscreen driver, (c) 2009 Telechips                                
tcc-ts got loaded successfully.                                                 
input: tcc-ts as /class/input/input1                                            
Telechips Remote Controller Driver Init                                         
input: telechips remote controller as /class/input/input2                       
Set ID to device mode                                                           
TCC RTC, (c) 2009, Telechips                                                    
tcc-rtc tcc-rtc: rtc core: registered tcc-rtc as rtc0                           
ID change ISR : Device                                                          
tcc-sdhc0: init                                                                 
hub 2-0:1.0: over-current change on port 1                                      
usbcore: registered new interface driver usbhid                                 
usbhid: v2.6:USB HID core driver                                                
Advanced Linux Sound Architecture Driver Version 1.0.18rc3.                     
ASoC version 0.13.2                                                             
TCC Board probe [tcc_board_probe]                                               
WM8731 Audio Codec 0.13                                                         
 wm8731 i2c_address [0x1A]                                                      
asoc: WM8731 <-> tcc-i2s mapping ok                                             
asoc: IEC958 <-> tcc-spdif mapping ok                                           
ALSA device list:                                                               
  #0: tccx_board (WM8731)                                                       
TCP cubic registered                                                            
NET: Registered protocol family 17                                              
RPC: Registered udp transport module.                                           
RPC: Registered tcp transport module.                                           
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5         
tcc-rtc tcc-rtc: setting system clock to 13191-05-01 07:18:30 UTC (1923626438)  
UDF-fs: No partition found (1)                                                  
List of all partitions:                                                         
No filesystem could mount root, tried:  ext3 ext4 ext2 cramfs vfat iso9660 fusef
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)