3uClinux History What is uClinux? Microcontroller Project (uCsimm) uClinux PortsRT-KernelDifference between Linux and uClinux
4HistoryJan 1998The first ports of Linux to systems without a MMU was done by Kenneth Albanowski and D. Jeff DionneDec 1998D. Jeff Dionne and Michael Durrant started work on designing a simm module capability of using the uClinux code as an OSFeb 1999uClinux was successfully ported to the Motorola MCF5206 and MCF5307 ColdFire® microprocessor
5History (cont’) 13 Sep 1999 22 Oct 1999 12 Apr 2000 16 Oct 2002 Jeff and Michael have released uClinux22 Oct 1999The uCsimm module Rt-Control Inc. created to run uClinux for embedded systems is now shipping12 Apr 2000New uClinux version pre7 announced16 Oct 2002the lastest uClinux version uc0 announced
6What is uClinux?A derivative of Linux 2.0 kernel intended for microcontro -llers without MMUsPronounced "you-see-linux“Free software under GNU Public License
7What is uClinux? (cont’) Linux vs. uClinuxMultitasking can be tricky!!Most of binaries and source code for the kernel have been rewritten to tighten-up and slim-down the code baseThe uClinux is much, much smaller than the original Linux 2.0 kernel, while retaining the main advantages of the Linux OS: stability, superior network capability(a full TCP/IP stack), and excellent file system support (Only NFS, ext2, MS-DOS and FAT16/32)common Linux APIuCKernel < 512 KBuCKernel + tools < 900 KB
8Microcontroller Project The uCsimm module is a microcontroller module built specifically for the uClinux OSdeveloped by Arcturus Networks Inc.(formerly Rt-Control Inc.)Features:a 16 MHz 68EZ328 DragonBall microcontoller2 MB Flash ROM8 MB DRAM21 general purpose I/O pins (or up to 13 with a graphic LCD panel enabled)a built-in display driver, capable of driving a monochrome LCD panel up to QVGA resolution (640x480)RS-232 Serial SupportHigh speed (1Mbps) I2C or SPI 3 wire seriala 3.3 Volt draw
9uClinux PortsCommunity members from all over the world have been porting uClinux since its release in 1998While originally developed for the Motorola chip, the number of available ports is always expandingPorted Microcontrollers and MicroprocessorsMotorola DragonBall, and other 68K DerivativesMotorola ColdFireARM7TDMI and MC68EN302ETRAXIntel i960PRISMAAtari 68KSeveral Devices running uClinux
10uClinux Ports (cont’) Motorola DragonBall, and other 68K Derivatives The first release to the public domain supporting the Motorola DragonBall(M68EZ328), M68238, and M68EN322Since then, uClinux has grown exponentially, as the worlds greatest MMU-less chip receive there own portsARM7TDMIAplio ported APLIO/TRIO chip (ARM7TDMI) and MC68EN302Built by standard uClinux kernelApplied ARM patches and uClinux patches
11Real-Time Extension for uClinux uClinux Real Time moves up to 1pre1 (Oct., 2000)Phil Wilshire has taken Kwonsk’s uClinux/RTL patches up to a later revision of uClinuxThis has run on a uCSimm but is NOT fully tested yetThe Real Time Linux Portal
12Differences between Linux and uClinux Memory ManagementThe most significant difference is the lack of a MMU in uClinuxuClinux removes the MMU requirement by implementing a flat memory model (a 1-to-1 virtual-to-physical mapping)uClinux allocates stack space at the end of the data for the executableOn uClinux, memory is limited to whatever physical memory is available at a given time to a program
13Differences between Linux and … (cont’) Linux Memory MapLinux w/ Virtual Memorystackheapstatic DatatextTOP ADDR D (virtual)Virtual Gap ~ 256 MBGaps Round to Next pageBASE ADDR C (virtual)uClinuxstackheapstatic DatatextTOP ADDR 00EA-6000 (physical)BASE ADDR 00E (physical)Heap Pages Allocated Using MMAPFixed size StackNo Gaps
14Differences between Linux and … (cont’) Process ForkingCurrently, the fork has not yet been implemented for any current implementation of uClinuxThe use of vfork call or utilization of multiple threads instead of multiple processes can compensate for the lack of a working fork call in most casesAs uClinux cannot implement the copy on write policy of Linux, user applications must be careful not to change the state of data in memory between vfork and exec calls
16EmbeddedICE macrocell Target System with NET+40 uClinux 개발환경ARMCoreEmbeddedICE macrocellNET+40Target System with NET+40ROMRAMPeripheralEmbeddedICE InterfaceDebug HostTAP ControllerThe NET+40 is one of the ARM core SoC, manufactured by NetSilicon Inc.
17uClinux 개발환경 (cont’) Cross Development Tools binutils-2.11gccgdb-5.0elf2fltbinutils-2.10elf2fltgenromfs-0.5.1
18uClinux 개발환경 (cont’) Libraries uClibc uC-libc The latest version: uClibcdownload:uC-libcThe old uClibc versiondownload:
19uClinux 개발환경 (cont’) uClinux/distribution (Official Full Source) The Latest snapshot source package is released on Sep. 27th, 2002Support ArchitecturesM68kColdFireARMSparci960NEC v850OPENcores OR1000Kernelsand kernel sourcesLibrariesthe older uC-libc and newer uClibcRich Application Sources
20miscellaneous documents configuration files for buid uClinux 개발환경 (cont’)uClinux/distribution (Official Full Source)uClinux-distDocumentationmiscellaneous documentsbinNETtel binary filesconfigconfiguration files for buidlibthe older uC-libclinux-2.0.xuClinuxlinux-2.4.xuClinuxtoolstools for romfsromfsroot file systemuClibcthe newer uClibcuserapplication programsvendorsvendor products/Arcturusfor uCdimm and uCsimm/NetSiliconfor NET+40/Samsungfor S3C4510
21uClinux 개발환경 (cont’) Debug Concept ARM7TDMI contains hardware extensions for advanced debugging featuresThe ARM7TDMI debug interface is based on IEEE Std , “Standard Test Access Port and Boundary-Scan Architecture”The debug extensions allow the core to be stopped either on a given instruction fetch breakpoint / watchpoint
22uClinux 개발환경 (cont’) JEENI (JTAG EmbeddedICE EtherNet Interface) Non-intrusive, uses no target resources & requires no porting to the target systemROMless bootingSupports ARM7 and ARM9 cores containing "DI" macrocellsUnlimited software breakpointsEthernet and serial I/O ports for fast, flexible host interfaceHigh-speed download (>100k bytes per second) of application codeNetwork compatibility allows shared and remote operationInternal ARM 710A cached processor assures fast operationFour status LEDs for observing operationFlash memory for easy firmware updates to next generation ARM coresVendor: Embedded Performance, Inc.
24uClinux 개발환경 (cont’) Building Software GNU Cross Development Tools (gcc, as, ld, and etc.)add an option “-gstabs” to an assembleradd an option “-g” to a compilerHow to execute and debug the built imageby Monitor Program : > download into a target RAM via user program (serial or Ethernet) > Debug : manually insert some debug codes such as print functionby JEENI (EmbeddedICE) : > download into a target RAM or a RAM included in an ICE via gdb > Debug : can use advanced debug features, breakpoint, watchpoint and etc., via gdb
25uClinux 개발환경 (cont’) Debugger Linux Platform (gdb or DDD) Breakpoints WatchpointsBacktraceDisassembled codeExamine MemoryExamine RegistersGNU DDD is a graphical front-end for command-line debuggers such as GDB, DBX, WDB, Ladebug, JDB, XDB, the Perl debugger
26Special Function Registers Memory Map after Initialization uClinux 개발환경 (cont’)Initialize Debugger (change memory map)0xUSB & LEDs (CS4)4K0xFFFFFFFF0xCache RAM0xFFF00000Special Function Registers0x0xFF800000LCD (CS3)4K0x0x1MEEPROM (CS2/0)0x0x0xFLASH (blk 2) (CS0/2)0xFLASH (blk 1) (CS0/2)4M0xCS 00xFP-DRAM (CS1)16M0x0xMemory Map after ResetMemory Map after InitializationThis memory map is for NetSilicon NET+40 MCU.
31DBoot Bootloader Supported processor(s): Features: ARM7TDMI based SoC NetSilicon NET+40 and Samsung S3C4530AFeatures:“dsh” command prompt for user interfacedownload the image through the serial port using XMODEM or through the Ethernet port using TFTP protocolexecute the program from Flash or DRAMwrite the image into Flash and erase block/sector/allreload from Flash into DRAMable to set the network configurationable to edit memory informationsupport the diagnostic tests (irq, printer)
33emnux Kernel derived from uClinux kernel It has two version, 2.0(2.0.38pre7) and 2.4(2.4.17uc0)/arch/armnommu/i196/m68knommu/drivers/kernel/boot/mach-netarm/kernel/lib/mm/lib/init/ipc/fs/kernel/linux/include/asm-armnommu/linux/net/mm/mmnommu/arch-netarm/proc-netarm/net/scripts