world leader in high performance signal processing
Trace: » 2006r2

Release Notes for uClinux for Blackfin 2006R2 Release

Version: 2006R2

Date: Nov. 2, 2006

The latest version of this document can always be found here: http://docs.blackfin.uclinux.org/doku.php?id=release_notes

Development Environments

Tool Chain: Toolchain Release 2006R2

u-boot: uboot_1.1.3 Release 2006R2

Host platform: SuSE Linux 9.2 or above

Target board: STAMP & EZKIT Board

Note: However, other similar host platforms are also supported, but they are not well tested.

Deliverables

Source files

uClinux_dist_2006R2.tar.bz2

Linux ELF file

linux-bf533-stamp
linux-bf533-ezkit
linux-bf537
linux-bf561

Compressed Linux image

uImage-bf533-stamp
uImage-bf533-ezkit
uImage-bf537
uImage-bf561

This document

release_notes_2006R2.pdf

Compressed archive of test results

test_results_bf533_STAMP_2006R2.tar.gz
test_results_bf533_EZKIT_2006R2.tar.gz
test_results_bf537_2006R2.tar.gz
test_results_bf561_2006R2.tar.gz

Summary of test results

test_results_summary_2006R2

Fixes in 2006R2 release

Improvements

  1. Build many new pieces of hardware.
    • SI3210/3050 PBX daughter board.
    • AD7392 video encoder daughter board.
    • MMC/SD card reader daughter board from Hans Eklund.
  2. Improve kernel.
    • Upgrade kernel to 2.6.16.27.
    • Access system registers by toolchain built-in read/write functions.
    • Add non-power of 2 memory allocator.
    • Enable SLOB memory allocator.
    • Allow 6-argument syscalls.
    • Load driver code and data into L1 SRAM by kernel module loader
    • Load application and library code and data into L1 SRAM by ELF binary loader
    • Move application stack into L1 scrach pad SRAM when process is scheduled to run.
    • Add L1 instruction sram allocator.
    • support the PT_TRACESYSGOOD flag.
    • support sigqueue system call.
    • Enable SYSV IPC interface
    • Support uboot args 'mem=xxM maxmem=xx[0]M' to reserve physical memory for application.
    • Allow people to change the kernel load address from 0x1000 to whatever
    • Prepare infrastucture for Anomaly Workarounds based on Silicon Rev.
    • Kernel code style clean up.
    • Enable kernel to boot from cramfs.
    • Add 3 system calls to access L1 SRAM.
    • Make CPLB address misses to cause SIGBUS in the app rather than kernel panic.
    • Add FIFO for delayed exceptions handling in hardware error interrupt entry. No exception is lost if several occurs at the same time.
    • Add memory project to page 0 (0~4k). Any process accesses these address is killed.
    • Update KGDB patch and enable kgdb to access MMRs.
    • Add patch from 3rd party to support cm-bf561 board.
  3. Add new drivers
    • Add AD7392 Zero Overhead RGB565 video frame buffer driver for both bf537 and bf533, support NTSC/PAL and RGB/YUV.
    • Add AD9960 PPI AD/DA driver.
    • Add watchdog timer driver, related daemon and test application.
    • Add a new serial core driver to replace current serial driver.
    • Add a proper dma_memcpy() driver
    • Add MMC/SD driver from Hans Eklund.
    • Add LED manipulation routines for BF537(debug only)
    • Add Support for ANYCOM Blue CF-300 CompactFlash Bluetooth cards
    • Add the Zaptel driver for Si3210/Si3050 PBX daughter board.
  4. Improve exist drivers
    • Improve BFIN MAC network performance for bf537.
    • Implement rs_wait_until_sent()in serial driver to support tcdrain() API
    • Implement CTS/RTS hardware flow control in serial driver
    • Reduce the overhead in serial driver in PIO mode.
    • Enable IRDA support in serial driver and add IRDA tool irattch.
    • Add Support for BF537/6/4 PORT H
    • Add Socket Support for CF and PCMCIA Cards driver
    • Make dmpc driver compiled for bf533 and add efficient power saving mode.
    • Update SPI bus driver to support dynamic baudrate and chip select signal. Enable full duplex mode. Add a new cs_change_per_word mode.
    • Improve the pfbutton driver to support input subsystem.
    • Imporve the common sport driver.
    • Imporve gptimer driver.
  5. Application and library
    • Add Cycle count utility and update other code in blackfin DSP library.
    • Add a jpeg viewer application.
    • Import dagrab, a fixed point cd ripper
    • Import dmalloc library.
    • Port ALSA library to blackfin.
    • Import readline library.
    • Import usb library and usb utility.
    • Update gdbserver to meet the new protocol in gdb 6.5
    • Upgrade Linphone to 1.2, osip2 lib to 2.2.2 and speex codec to v1.1.12.
    • Upgrade and enable UPNP library.
    • Update netperf test tools and enable cpu usage feature.
    • Enable qt embedded free library to be build as a shared library and enable konqueror3 to dynamically link with shared library.
    • Port Asterisk to blackfin running with the Si3210/Si3050 PBX daughter board. Import some related libraries.
  6. Real Time OS enhancement
    • Update ADEOS real time layer for linux on Blackfin.
    • Port AD9960 linux driver to run under ADEOS.
    • Add a tracer tool for ADEOS.
  7. Enable SYSV and Sigqueue LTP test cases for Blackfin. Update to July release of LTP.
  8. Create an automated build and test framework for all test cases based on expect script.

Known Issues

A full list of known issues can be found at:

http://blackfin.uclinux.org/tracker/index.php?group_id=17&atid=141

No Issue Title
1146 a couple of the libraries don't compile.
1165 CVS 2.6.16 kernel networking fails after 2 hours of downloading on 533
1186 Sometimes CTRL+C kills shell
1198 checksum() return wrong results when receive UDP packet in latest kernel 2.6.16.
1289 Linphone doesn't work when the other side enter and exit hold mode.
1475 Blackfin dpmc and pm driver are broken
1676 busybox hdparm doesn't work properly if only built once
1685 cplbmgr.S does not exit properly on error condition
1800 kaffe.flt crash

There are also some issues in the LTP test cases. They are recorded as bug 744, 745, 1010, 1050, 1096, 1211, 1212, 1218, 1219, 1358, 1566, 1606 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1803, 1804, 1808.

Build Procedure

1. Install Toolchain Release 2006R2

Go to http://blackfin.uclinux.org/frs/?group_id=18 for more information

2. Download the source code of project uClinux for Blackfin release 2006R2

Go to http://blackfin.uclinux.org/frs/?group_id=17

3. Uncompress uclinux-dist.tar.bz to working directory

cp uClinux-dist_2006R2.tar.bz /(WORK_DIR)
cd /(WORK_DIR)
bunzip2 uClinux-dist_2006R2.tar.bz
tar -xvf uClinux-dist_2006R2.tar

4. Compile the source using following commands

cd uClinux-dist
make menuconfig (save and exit without making any changes)
make clean 
make 

5. Find the compiled Blackfin executable images in the following location

$(WORK_DIR)/uClinux-dist/images/

6. 6 types of images are available according to the kernel configuration.

linux-ext2
linux-cramfs
linux-romfs
uImage-ext2
uImage-cramfs
uImage-romfs

Load Kernel to Target Board

1. Use below serial cables to connect board to host computer.

Male-Female 1-1 serial cable

2. Use minicom or some other serial communications utility to configure the serial port with the following parameters. If run minicom for the first time, run “minicom -s” to setup the port.

Serial Device = /dev/ttyS0
Baud Rate = Baud that have been selected in kernel menuconfig (Default value is 57600)
Number of bits = 8
Parity = None
Stop bits = 1

3. Make sure the BMODE pins on the target board are set to 00. If u-boot loads automatically on reset, the pins are already set correctly.

4. Make sure tftp server is installed in the host machine. Copy linux from uClinux-dist/images/ that is built in above steps to the /tftpboot of the host PC.

5. Load the linux file with the following boot loader commands. Make sure the ipaddr (target board IP) and serverip (host IP) are correct.

STAMP> setenv ipaddr x.y.z.n
STAMP> setenv serverip x.y.z.m 
STAMP> saveenv
STAMP> tftp 0x1000000 linux
STAMP> bootelf 0x1000000

Where x.y.z.m is the ip address of the host machine, and x.y.z.n is the ip address of the target board.

6. The kernel should then boot

Adding / upgrading kernel in flash

Building Linux image (compressed and uncompressed)

(This Image Will be Used in bootm command)

Linux ELF image has to be changed as per u-boot standards to load Linux using bootm command. Following subsections explain how to build compressed and uncompressed Linux images.

Building Compressed Linux Image Manually

Compressed Linux images can be found under folder “uClinux-dist/image”. But, you can also generate by yourself as follows.

1. Generate the binary file from the ELF file, using following command

$ bfin-uclinux-objcopy -O binary linux linux.bin 

2. Compress the binary file obtained above, using following command

$ gzip -9 linux.bin  

3. Build the final linux image, using following command

(WORK_DIR)/u-boot_1.1.3/tools/mkimage -A blackfin -O linux -T kernel -C gzip -a 0x1000 
-e 0x1000 -n "Bfin uClinux Kernel" -d linux.bin.gz uImage

Use the utility mkimage present in the u-boot_1.1.3/tools directory to merge the header information like Image Name, Image Type, Data Size, Load Address, Entry Point into the linux.bin.gz.

Building uncompressed Linux image

Use following commands to build uncompressed Linux image

(WORK_DIR)/u-boot_1.1.3/tools/mkimage -A blackfin -O linux -T kernel -C none -a 0x1000 -e 0x1000 
-n "Bfin uClinux kernel" -d linux.bin uImage

0x1000 is used because we have compiled the kernel with that location as the entry point. If anyone wants to chose a different address for entry point (for eg, 0x20000), then please give that address instead of 0x1000. Ensure to change the entry point of the kernel.

Programming Flash

STAMP> tftp 0x1000000 uImage
STAMP> protect off all
STAMP> erase 0x20040000 0x203EFFFF
STAMP> cp.b 0x1000000 0x20040000 $(filesize) 
STAMP> setenv bootcmd bootm 0x20040000 
STAMP> save
STAMP> reset

Build Customized uClinux

Customize Kernel

1. make menuconfig in uClinux for Blackfin project

2. select option [Kernel/Library/Defaults Selection] → [Customize Kernel Settings] and exit

3. In kernel configuration, processor and board specific options can be changed in [Processor type and features], such as cache status, CPU, DMA, etc.

4. Driver specific options are in respective menus. Such as Ethernet driver in [Networking supporting], sound card driver in [Sound], video driver in [Graphic Support], etc.

5. Save and exit. Then make the image again as mentioned before. The changes of the kernel take effects after you load and run the new image.

Customize Application and Lib

1. make menuconfig in uClinux for Blackfin project

2. select Blackfin architecture in menu [Vendor/Product Selection] → [AnalogDevices Product]

3. select option [Kernel/Library/Defaults Selection] → [Customize Vendor/User Settings] and exit

4. In user configuration, applications and libraries can be selected and debugging information can be enabled.

5. After the menuconfig is done, make the image again as mentioned before. The new selected application can be found in the romfs after you load and run the new image.

Customize FLAT/ELF Binary Format

1. make menuconfig in uClinux for Blackfin project

2. select Blackfin architecture in menu [Vendor/Product Selection] → [AnalogDevices Product]

3. select [Kernel/Library/Defaults Selection] → [Customize Vendor/User Settings] and exit

4. In menu [Blackfin Build Options] → [Binary Format], select FDPIC to build application into ELF binary and library, select FLAT to build FLAT binary, select Shared-FLAT to build shared FLAT binary and library. Don't foget to select install shared libraries if you want to run application built with shared library.

5. Change into folder uClinux-dist and make the image.

Customize for debugging

1. To debug an application, please refer to the document “gdb_guide_bfin.txt” in patch folder bfin_patch/kgdb_patch.

2. To do source level kernel debugging by kgdb, please refer to the README file in patch folder bfin_patch/kgdb_patch. After apply the kgdb patch file to the kernel, a simple guide “kgdb_bfin.txt” can be found in subfolder “linux-2.6.x/Documentation/blackfin/”

Reporting Bugs

1. Go to the following Blackfin uClinux bug tracker page,

http://blackfin.uclinux.org/tracker/?atid=141&group_id=17&func=browse

2. If the bug is not already reported click on “Submit New” button to report new bug.