world leader in high performance signal processing
Trace: » 2005r4

Release Notes for uClinux for Blackfin Version 2005R4

Version: 2005R4

Date: Jan. 12, 2006

Development Environments

Tool Chain: Toolchain Release 2005R4

u-boot: uboot_1.1.3 Release 2005R4

Host platform: Suse Linux 9.2 or above

Target board: STAMP Board

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

Deliverables

Source files

uClinux_dist_2005R4.tar.bz2

Linux ELF file

linux-bf533
linux-bf537
linux-bf561

Compressed Linux image

uImage-bf533
uImage-bf537
uImage-bf561

This document

release_notes_2005R4.pdf

Compressed archive of test results

test_results_bf533_2005R4.tar.gz
test_results_bf537_2005R4.tar.gz
test_results_bf561_2005R4.tar.gz

Summary of test results

test_results_summary_2005R4

Fixes in release 2005R4

Improvements

  1. Support BF561-EZKIT and add a tool to load code to run in core B.
  2. Support Bluetechnix CM Platform, which is also based on BF533.
  3. Enable module support in default configuration and generate module dependency file for modprobe.
  4. Upgrade to mainline source code
    • Upgrade uClibc to version 0.9.27.
    • Upgrade Linphone to version 1.1.0
    • Upgrade LTP to 20051205 release.
  5. Reorganize the scheduling and signal handling.
    • Defer scheduling and signal handling from different interrupt handlers to interrupt level 15.
    • Deal with the deferred exception handler and the defered interrupt handler in the same level of system call handler.
    • Run schedule and do signal from each interrupt handler above level 14.
    • Move softirq handler to interrupt level 14
  6. Prevent double fault exception.
    • Make sure that in an exception handler, we use a stack that is covered by a CPLB.
    • For exceptions other than CPLB misses, lower our priority to IRQ5, where we can use the normal kernel stack and use other regular kernel functions.
  7. Port new applications, libraries and tools
    • samba
    • strace
    • SQLite
    • lmbench3.
    • whetstone.
    • network audio player
    • ncurses
  8. Work around new hardware anomalys.
    • Bypass the first DCLPB fault exception, only handle the second one if it is from the same fault address.
    • Do not put SSYNC,CSYNC or IDLE in the second to last instruction of a hardware loop.
    • Do not use DMA_RUN bit to detect completion of a DMA transfer.
  9. Change paths from bfinnommu to blackfin, per request from Linux Kernel Mailing list.
  10. Enable oprofiler support in kernel and Port oprofiler tools
  11. Enable interrupt latency benchmark
  12. Add new device drivers
    • Enable IDE driver
    • Enable 802.11 WLAN driver
    • Enable PPI driver
    • Enable NAND flash driver
    • Port YAFFS driver
    • Add a common SPI channel driver. All high level drivers access SPI device by this driver.
  13. ADI1836 audio driver improvement
    • Reduce dummy buffer size from 256 bytes to 4 bytes
    • No interrupts generated in dummy DMA transfer
    • When audio driver is not active, DMA is also stopped.
    • Enable I2S mode for audio input and output. Modify mixer for I2S mode.
    • Enable multichannel output. Add a mixer function to change the output channels when play stereo.
    • Enable play multi independent audio streams concurrently.
    • Make audio DMA stable.
  14. Kernel debugging improvement
    • Enable hardware single stepping for application debugging.
    • Report precise hardware error information
    • debug kernel start. Install a mini-execption handler (replacing the U-Boot one), turn the UART on, and dump out the SEQSTAT register.
    • Enable hardware trace buffer in dump
  15. Improve power management
    • Implement the suspend function in bf533_pm_suspend.
    • SDRAM enters self-refresh mode before deepsleep to save more power.
    • Enable PM on BF537
  16. Enable PPPoE
  17. Enable DMA in SPI driver.
  18. Add board specific Kconfig Option for PF port/pin, which is used for flash and ethernet sharing.
  19. Enhance msh to support funtions in scripts.
  20. Transmite bfin atomic testandset operation in exception 4 into a new syscall, sys_bfin_spinlock.

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
891tcp stress testing echo service
900busybox/msh,cd,tar and pipes
960NFS unstable under heavy load
991Infrequent audio crash
1012After running dpmc to_deepsleep testcase, the kernel would panic after a while
1014kernel built with audio configuration sometimes would fail to boot up and hangs
1030syslogd respawning messages
1031Problem in BF537(?) Signal Handler
1035CoreB test failed on bf561

There are also some issues in the LTP test cases. They are recorded as bug 532, 561, 567, 732, 735, 742, 744, 745, 890, 1010 and 1019.

Build Procedure

1. Install Toolchain Release 2005R4

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

2. Download the source code of project uClinux for Blackfin release 2005R4

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

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

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

4. Compile the source using following commands

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

5. Find the compiled blackfin executable linux in the following location

$(WORK_DIR)/uClinux-dist/images 

6. Above file shall be used to download to the target board.

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 bootloader 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

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.3tools/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 0x20100000 0x203FFFFF
STAMP> cp.b 0x1000000 0x20100000 $(filesize) 
STAMP> setenv bootcmd bootm 0x20100000 
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”→“AnalogDevice Product”

3. select option “Kernel/Library/Defaults Selection” → “Customize Vender/User Settings” and exit

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

5. In order to configure uClibc, you should go into the folder “uClibc” and do menuconfig.

6. 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 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.