How to Create a Ramdisk with Auto-run Demo
From Texas Instruments Embedded Processors Wiki
This page uses the DM365 showcase demo ramdisk as an example to illustrate how to create a ramdisk which has boot-up auto-run demo application.
Contents |
Many times when we present demo's in trade shows or customer visits, we hate the complicate setup that hooks up the serial cable to Teraterm or Ethernet cable to NFS server and keyboard typings. It would be great if everything had been flashed to the on-board NAND chip and the demo automatically started right after power on the board.
The following sections use the DM365 showcase demo ramdisk as the example to illustrate how to archive this goal.
Procedure:
- Prepare demo auto-run
- Find a PSP base ramdisk & create a tarball from it
- Create a bigger empty ramdisk
- Copy over the tarball and demo
- Test the ramdisk via tftp boot
- Flash the ramdisk to the board
Prepare Auto-run
Before create the ramdisk, we have to make the demo automatically run via NFS when power on the board.
The showcase demo is installed in /opt/showcase directory in the target filesystem.
Create a script /opt/showcase/autorun.sh to run the demo.
#!/bin/sh
TMPFILE=/tmp/720P_60.264
./loadmodules.sh || { echo "Error: loadmodules failed"; exit 1; }
./encoded.720p -b 3000000 -o $TMPFILE
./decoded.720p $TMPFILE &
Create a script /etc/rc.d/rc.local to call /opt/showcase/autorun.sh. /etc/rc.d/rc.local will be automatically executed after the kernel boots up.
#!/bin/sh cd /opt/showcase ./autorun.sh
Do not forget to add the executable attribute to these two scripts.
chmod +x /opt/showcase/autorun.sh chmod +x /etc/rc.d/rc.local
Now boot the board from NFS. The demo should automatically start.
Prepare Base Ramdisk
Normally the PSP package provides a ramdisk, which has a minimum set of functionalities . We start from it and add the demo and its dependencies.
Make a copy of the PSP ramdisk and create a tarball from it.
cp -a <path_of_PSP>/ramdisk.gz /tmp/baserd.gz cd /tmp gunzip baserd.gz sudo mount baserd /mnt -o loop cd /mnt sudo tar zcf /tmp/baserd.tar.gz * cd .. sudo umount /mnt
Create Empty RamDisk
Create a 10MB empty ramdisk. If the size is not big enough, we will face copying errors in next section. Then we have to start over from here with a bigger size.
cd /tmp dd if=/dev/zero of=ramdisk bs=1M count=10 /sbin/mkfs.ext2 ramdisk sudo mount ramdisk /mnt -o loop cd /mnt sudo tar zxf /tmp/baserd.tar.gz
Copy Over Demo Package
Copy over the demo to the new ramdisk. If the ramdisk size is too small to hold the components, go back to the previous step to create a bigger ramdisk.
sudo mkdir -p /mnt/opt sudo cp -ar <target_fs>/opt/showcase /mnt/opt sudo cp -a <target_fs>/etc/rc.d/rc.local /mnt/etc/rc.d/ cd /tmp sudo umount /mnt gzip ramdisk cp -a ramdisk.gz /tftpboot
Test Ramdisk
Set the u-boot env as following and boot the board. The demo should automatically start from ramdisk via tftp.
bootcmd='tftp 0x82000000 ramdisk.gz; tftp 0x80700000 uImage; bootm 0x80700000'
bootargs='mem=104M console=ttyS0,115200n8 root=/dev/ram0 rw \
initrd=0x82000000,10M ip=off davinci_capture.device_type=4 \
dm365_imp.oper_mode=0'
As expected, you will see some error messages in console, for example some libraries are missing. To find more easily which libraries are missing, you can use ldd command in the NFS filesystem. It will print which shared libraries your demo uses.
ldd < your demo >
Follow the steps below to copy the missing libraries from the full set of NFS target filesystem and re-test the ramdisk until the demo runs successfully.
cd /tftpboot gunzip ramdisk.gz sudo mount ramdisk /mnt -o loop sudo cp -a <full_NFS_target_fs>/<missed_files> /mnt sudo umount /mnt gzip ramdisk
Flash Ramdisk
Now the ramdisk is ready for use. Flash it to the on-board NAND device.
tftp 0x80700000 uImage nand erase 0x400000 0x200000 nand write 0x80700000 0x400000 0x200000 tftp 0x82000000 ramdisk.gz nand erase 0xC00000 0x430000 nand write 0x82000000 0xC00000 0x430000
Use the following bootcmd to boot the board from NAND.
bootcmd='nand read 0x82000000 0xc00000 0x430000; nboot 0x80700000 0 0x400000; bootm'
Comments
Comments on How to Create a Ramdisk with Auto-run Demo

edited to add the ldd command to find the dependencies.
--Simon inizan 03:55, 11 June 2009 (CDT)