Education Outline • Overview of the uCdimm/uClinux Development Environment • Configuring the uCdimm/uClinux • Write a “C” code using the General Purpose Parallel I/O • Overview of the File System Hierarchy in uClinux Overview of the uCdimm/uClinux Development Environment Outline • What is uCdimm? • What is uCgarderner? • Overview of Development Environment • Overview of Development Process What is uCdimm? • uCdimm is “uc68VZ328 Microcontroller Module” DRAM 33MHz Ethernet Controller FLASH CPU ROM DragonBall 2Mb 68VZ328 8Mb What is uCgardener? • uCgardener provides power and connecting interface for uCdimm RJ45 DB9 serial Ethernet jack connector Power jack and on board regulator Overview of Development Environment (1) RS-232 + The connection between host computer and uCdimm plus uCgardener is made through serial port when running boot loader. Overview of Development Environment (2) RS-232 + Ethernet The connection between host computer and uCdimm plus uCgardener is made through serial port and ether net when the uClinux boots. Overview of Development Process • Kernel Image is generated on host computer using cross-compiler. • Kernel Image is uploaded to uCdimm through serial port when running boot loader. • Kernel Image is uploaded to uCdimm through ethernet when uClinux boots. • Bootloader can boot uClinux kernel ether from flash ROM or memory. Configuring the uCdimm/uClinux Outline • Configuring the Linux Workstation • Configuring the uCdimm Target • Getting the Serial Connection Up and Running • Getting the Ethernet Connection Up and Running • Activities/Exercises Configuring the Linux Workstation • Installing the tool chains • Setting up the working environment • Configuring Development Environment Installing the Tool Chains (1) – For the libc6 case, become root and • Mount the uClinux CD, eg “mount /dev/cdrom /mnt/cdrom” • change into the libc6 directory, eg “cd /mnt/cdrom/RPM/libc6” • then do a make, ie “make” – Some items can be found at /opt/uClinux bin/ include/ linux/ man/ deftemplat.sh* info/ m68-coff/ romdisk/ dev/ lib/ m68-pic-coff/ src/ Setting up the Working Environment (1) • With the tool chains installed, you can create your working environment : – Make a directory to hold your work – Change to that directory – Then issue the ‘buildenv’ command – Finally issue the ‘make’ command For example : • mkdir /tmp/uCsimm_work • cd /tmp/uCsimm_work • buildenv • make Setting up the Working Environment (2) • After issuing make command, we can find something at your working directory: Makefile deftemplate.sh image.bin linux romdisk/ src/ romdisk.map romdisk.img Configuring the uCsimm Target • Power adapter • The RS232 serial connection • The Ethernet connection Getting the Serial Connection Up and Running • Using a ‘straight through’ (not null modem) cable, connect your workstation to your uCgardener. • Setting up minicom and the serial connection • Booting uClinux • Uploading a new OS image Setting up minicom and serial connection (1) Setup minicom parameters: – Choose the Serial port setup and within that choice : • Select your Serial Device ( e.g. /dev/ttyS0 ) • Next set your Bps/Par/Bits as 19200 8N1 • Finally say no (N) to both Hardware and Software Flow Control Setting up minicom and serial connection (2) • Setup minicom parameters: (continued…) – Choose Modem and dialing and within that choice • remove the Init string • remove the Reset string – Set minicom to use ‘sz –X’ for XMODEM protocol. Bootloader Commands (1) • help – Print a list of commands with short descriptions • rx – Receive a binary image via the RS232 port using XMODEM protocol – Store the new image starting at DRAM address 0x00020000. • program – Erase an area of the FLASH ROM starting at 0x10C10000. – Write the image currently in DRAM into that area of the FLASH. • The image is presumably one that was received into DRAM via the rx command Bootloader Commands (2) • go – Execute the image residing in the OS area of the FLASH ROM • goram – Execute the image residing in DRAM, presumably one that has been received via the rx command • md address [endaddress] – Display a memory dump in hexadecimal, starting at address and ending at endaddress. • mm address values… – Starting at address, sequentially write a byte at a time from values into memory. • mm 00020000 123456 – 0x12 into 0x00020000 – 0x34 into 0x00020001 – 0x56 into 0x00020002 Bootloader Commands (3) • fast – Change the serial speed to 115200 bps Booting uClinux • bootloader’s B$ prompt – B$ go • Login – uCsimm login: root – Password: uClinux • “ls” command Uploading a new OS image (1) • Upload a new image at – 19200bps (slow) or – 115,200bps (fast) • Slow – At the B$ prompt type rx. B$ rx – Press ctrl-a and the z to enter the “Minicom Command Summary” screen – Choose s for Send files, the as prompted choose the xmodem for upload protocol – Next you’ll be prompted for the filename Upload a new OS image (2) • To move the just uploaded image to FLASH ROM – B$ program Getting the Ethernet Connection Up and Running • Configuring nfs on the Linux Workstation • Setting up the network parameters on your Linux workstation • Transferring uClinux images aided by nfs Setting up the network parameters on your Linux workstation (1) • The network environment setup – Linux workstation • IP address = 192.168.1.100 • network mask = 255.255.255.0 • network address = 192.168.1.0 • gateway address = 192.168.1.254 • nfs service enable Setting up the network parameters on your Linux workstation (2) NFS server setup – Add the following line to /etc/exports to tell the nfs server what files it may export for external mounting. For example, /nfsroot is the nfs exported directory, /nfsroot (ro) – Stop and start the nfs server /etc/rc.d/init.d/nfs stop /etc/rc.d/init.d/nfs start /etc/rc.d/init.d/nfs restart Configuration the uCdimm Target (1) • The network environment setup – uCsimm • IP address = 192.168.1.200 • network mask = 255.255.255.0 • network address = 192.168.1.0 • gateway address = 192.168.1.254 • DNS address = 203.77.1.20 – Mount the nfs directory • /bin/mount -t nfs 192.168.1.100:/nfsroot /usr Configuration the uCsimm Target (2) • Modify the /etc/rc file # attach the interfaces /sbin/ifattach /sbin/ifattach \ --addr 192.168.1.200 \ --mask 255.255.255.0 \ --net 192.168.1.0 \ --gw 192.168.1.254 eth0 # expand the ramdisk /sbin/expand /ramfs.img /dev/ram0 (continued…) Configuration the uCsimm Target (3) • Modify the /etc/rc file ( continued … ) # mount ramdisk, proc and nfs /bin/mount -t ext2 /dev/ram0 /var /bin/mount -t proc proc /proc /bin/mount -t nfs 192.168.1.100:/nfsroot /usr # start up the internet superserver /sbin/inetd & # that's it... sucess exit 0 –flashloader A Example : Make a New Image • Change the default password – Modify the src/init/login.c, line #24 • Make a new image, enter ‘make’ • Copy the new image, image.bin, to /nfsroot – cp image.bin /nfsroot • Boot up the uCdimm • On the uCdimm, mount the nfs filesystem – mount –t nfs 192.168.1.100:/nfsroot /usr • Download and flash the new image – flashloader /usr/image.bin Using the General Purpose Parallel I/O OUTLINE • Introduction • Example Programs using Port D I/O • Running the Example Programs • Primitives for an I/O Control Language • Activities / Exercise Introduction • Circuitry has been added to the uCgardener to make Port D available as input and output. – Available 8 output leds and 8 input switch – Negative logic • 1: off • 0: on Example Programs using Port D I/O • Program #1 – output only, turns on leds Example Program #1 – Write Port D /* * file: write_led.c */ #include <asm/MC68EZ328.h> void init_portd(void) { PDSEL = 0xFF; /* select port D for I/O */ PDDIR = 0xFF; /* set bits 0-7 as output */ PDDATA = 0xFF; /* initialize to off */ } /* init_portd() */ Example Program #1 – Write Port D (cont’d) int write_output_portd(unsigned int which_bit) { unsigned char temp; if (which_bit > 7) return –1; temp = 0x01 << which_bit; PDDATA = PDDATA & ~temp; if (temp == 0) return 0; else return 1; } /* write_output_portd() */ Example Program #1 – Write Port D (cont’d) int main(void) { unsigned int out_led; int result; init_portd(); while (1) { printf(“\nWhich led[range 0->7] shall we turn on?\n”); scanf(“%d”, &out_led); result = write_output_portd(out_led); if (result < 0) { printf(“Invalid led number\n”); continue; } } } /* main() */ Running from a Testing Environment (cont’d) • The steps to running write_led – On the host, create the program file in working directory – On the host, compile the program file • m68k-pic-coff-gcc write_led.c –o write_led – From your serial terminal, run the program on the target with the working directory The File System Hierarchy in uClinux The File System Hierarchy Standard (1/3) Directory Directory Purpose/Contents Name bin essential command binaries which may be used by the system administrator and by ordinary users, required for system boot boot kernel image and configuration files used by the boot dev devices files etc host-specific configuration files home user home directories The File System Hierarchy Standard (2/3) lib essential shared libraries and kernel modules mnt mount point for temporarily mounting file system such as those on a CDROM or floppy disk opt add-on application software packages root the root user’s home directory sbin system binaries, essential for system administration, but not for system boot The File System Hierarchy Standard (3/3) tmp location of temporary files user secondary hierarchy, intended as shareable, read-only data. Here you’ll find games, include files used by C programs, the linux source code hierarchy, and so on. var variable data such as spool directories and log files The File System Hierarchy in uClinux (1/2) Directory Directory Purpose/Contents Name bin per the standard dev per the standard etc per the standard htdocs when the uClinux is accessed via ethernet using http, this is the directory accessed lib contains liberror.txt, a file containing text for a variety of error messages The File System Hierarchy in uClinux (2/2) proc traditional sbin per the standard tmp a link to /var/tmp usr empty, suggested as the mount point for var presumably per the standard, but empty except for lost+found