Linux
on BeagleBoard Xm
       Version
1.5 [J512]
1. Introduction 3
2. Do this (Practical Notes)  3
2.1 How to Create
 Root File System (RAMDISK) using BusyBox? 4
2.2 How to Cross
 Compile a module?  8
2.3 How to enable
 Ethernet(SMSC9514) in Linux 3.0.4 for BeagleBoard Xm?  9
2.4 How to
 flash(blink) an LED in BeagleBoard?  10
2.5 How to run a
 web server in BeagleBoard?  14
2.6 How to mount
 the root file system over NFS? 14
2.7 How to boot
 kernel using initramfs for root file system? 15
2.8 How to enable
 core dump? 16
2.9 How to create
 cscope database for a particular kernel build? 16
3. ToolChain 16
4. Cross-Compiling Linux 16
5. Cross-Compiling BusyBox 17
6. Cross-Compiling U-Boot 18
7. Making Root File System 19
8. Links 19
9. Notes 20
 
1.
Introduction
 The
following components are required (obvious) for booting BeagleBoard
Xm with Linux.
Tool
   chain
 
U-Boot
   Boot loader
 
Root
   File System (BusyBox)
- Ramdisk {
      Section
      2.1 }
       
- NFS  {
      Section
      2.6 }
       
- initramfs {
      Section
      2.7
      } 
       
- JFFS2  {
      MTD,NAND
      }
       
ROMFS/CRAMFS {
      Read Only File System }
 
 
Linux
   Kernel
 
Tftp
   and nfs servers on the host system
 
2.
Do this (Practical Notes) 
 Two
important files: /etc/inittab & /etc/init.d/rcS
 Exactly
follow this excellent link:
http://processors.wiki.ti.com/index.php/Creating_a_Root_File_System_for_Linux_on_OMAP35x
 To
make RAMDISK WORK after fresh busybox compilation:
  1. Replace
/etc/inittab with working version
  2.
Replace /etc/init.d/rcS with working version
  3. Populate /lib
with all the require so(shared object files) libraries 
   [NOTE:
Also  available in arm-unknown-linux-gnueabi/sys-root/lib/]
  4.
For kernel 3.0 --> 
setenv
bootargs console=ttyO2,115200n8 root=/dev/ram0 rw ramdisk_size=32768
initrd=0x81600000,32M  
    For kernel 2.6.36 --> 
setenv
bootargs mem=88M ip=172.16.9.111 console=ttyS2,115200n8
root=/dev/ram0 rw initrd=0x81600000,16M ramdisk_size=16384
2.1 How to Create Root
File System (RAMDISK) using BusyBox?
STEP
1: Build busybox[Normal user OK] 
$
mkdir /home/vinod/tgt 
Goto
busybox source & build & last step: make ARCH=arm
CROSS_COMPILE=arm-unknown-linux-gnueabi-
CONFIG_PREFIX=/home/vinod/tgt install 
This
would install 3 dirs in tgt folder 
$
cd /home/vinod/tgt 
[3
Points here → (1) Create some dirs (2) Create some files (3) Copy
the sharel libraries]
STEP
2: Create required dirs for root file system [Do this as root] 
mkdir
dev; 
mknod
dev/console c 5 1; 
mkdir
dev/pts; 
mkdir
etc; 
mkdir
etc/init.d; 
mkdir
lib; 
mkdir
mnt; 
mkdir
opt; 
mkdir
proc; 
mkdir
root; 
mkdir
sys; 
mkdir
tmp; 
mkdir
var; 
mkdir
var/log; 
mkdir
debug 
STEP
3: Populating the required shared libraries  {Do this as ROOT}
$
cd /home/vinod/tgt/lib 
$
cp -r
/home/vinod/cctools/build/target/arm-unknown-linux-gnueabi/sys-root/lib/*
. 
Use
the following command for a CodeSourcery cross-compiler.
[cp
-r
/home/vinuz/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/libc/lib/*
.]
STEP
4: Populate other required files 
$
cd etc/ 
$
vi fstab 
proc
   /proc           proc    defaults        0       0 
none
   /tmp            tmpfs   defaults        0       0 
none
   /dev/pts        devpts  gid=5,mode=622  0       0 
$
vi group 
root:x:0:root
$
vi passwd 
root::0:0:root:/root:/bin/ash
 [NOTE: Have seen /bin/bash also] 
$
vi hosts 
#
Do not remove the following line, or various programs 
#
that require network functionality will fail. 
127.0.0.1
  localhost.localdomain localhost 
$
vi inittab 
#
/etc/inittab 
#
System configuration/initialization script. 
#
This is run first except when booting in single-user mode 
# 
::sysinit:/etc/init.d/rcS
#
Start an "askfirst" shell on the console 
::askfirst:-/bin/sh
#
Things to do when restarting the init process 
::restart:/sbin/init
#
Things to do before rebooting 
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount
-a -r 
::shutdown:/sbin/swapoff
-a 
==========================================================
$
vi init.d/rcS 
#!/bin/sh
# 
 --------------------------------------------- 
# 
 Common settings 
# 
 --------------------------------------------- 
HOSTNAME=beagleboard_vinod
VERSION=0.90
hostname
$HOSTNAME 
# 
 --------------------------------------------- 
# 
 Prints execution status. 
# 
# 
 arg1 : Execution status 
# 
 arg2 : Continue (0) or Abort (1) on error 
# 
 --------------------------------------------- 
status
() 
{ 
 if
[ $1 -eq 0 ] ; then 
  echo
"[SUCCESS]" 
 else
  echo
"[FAILED]" 
  
  if
[ $2 -eq 1 ] ; then 
   echo
"... System init aborted." 
   exit
1 
  fi
 fi
} 
# 
 --------------------------------------------- 
# 
 Get verbose 
# 
 --------------------------------------------- 
echo
"" 
echo
"    $HOSTNAME (v$VERSION) : System initialization..." 
echo
"" 
echo
"    Kernel release : `uname -s` `uname -r`" 
echo
"    Kernel version : `uname -v`" 
echo
"" 
# 
 --------------------------------------------- 
# 
 MDEV Support 
# 
 (Requires sysfs support in the kernel) 
# 
 --------------------------------------------- 
echo
-n " Mounting /proc             : " 
mount
-n -t proc /proc /proc 
status
$? 1 
echo
-n " Mounting /sys              : " 
mount
-n -t sysfs sysfs /sys 
status
$? 1 
echo
-n " Mounting /dev              : " 
mount
-n -t tmpfs mdev /dev 
status
$? 1 
echo
-n " Mounting /dev/pts          : " 
mkdir
/dev/pts 
mount
-t devpts devpts /dev/pts 
status
$? 1 
echo
-n " Enabling hot-plug          : " 
echo
"/sbin/mdev" > /proc/sys/kernel/hotplug 
status
$? 0 
echo
-n " Populating /dev            : " 
mkdir
/dev/input 
mkdir
/dev/snd 
mdev
-s 
status
$? 0 
# 
 --------------------------------------------- 
# 
 Mount the default file systems 
# 
 --------------------------------------------- 
echo
-n " Mounting other filesystems : " 
mount
-a 
status
$? 0 
# 
 --------------------------------------------- 
# 
 Set PATH 
# 
 --------------------------------------------- 
export
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin 
# 
 --------------------------------------------- 
# 
 Start other daemons 
# 
 --------------------------------------------- 
echo
-n " Starting syslogd           : " 
/sbin/syslogd
status
$? 0 
echo
-n " Starting telnetd           : " 
/usr/sbin/telnetd
status
$? 0 
echo
-n 0 > /sys/power/fb_timeout_value 
mkdir
/dev/v4l 
ln
-s /dev/video1 /dev/v4l/video1 
ln
-s /dev/video2 /dev/v4l/video2 
# 
 --------------------------------------------- 
# 
 Done! 
# 
 --------------------------------------------- 
echo
"" 
echo
"System initialization complete Mr.Vinod ." 
==========================================================
$
vi mdev.conf 
audio
      0:5 0666 
console
    0:5 0600 
control.*
  0:0 0660 @/bin/mv /dev/$MDEV /dev/snd/ 
dsp
        0:5 0666 
event.*
    0:0 0600 @/bin/mv /dev/$MDEV /dev/input/ 
fb
         0:5 0666 
nfs
        0:5 0770 
null
       0:0 0777 
pcm.*
      0:0 0660 @/bin/mv /dev/$MDEV /dev/snd/ 
rtc
        0:0 0666 
tty
        0:5 0660 
tty0*
      0:5 0660 
tty1*
      0:5 0660 
tty2*
      0:5 0660 
tty3*
      0:5 0660 
tty4*
      0:5 0660 
tty5*
      0:5 0660 
tty6*
      0:5 0660 
ttyS*
      0:5 0640 
urandom
    0:0 0444 
zero
       0:0 0666 
NOTE:
chmod a+x /home/vinod/tgt/etc/init.d/rcS  
STEP
5: Creating & booting a RAMDISK 
=============================
==
dd
if=/dev/zero of=rd-ext2.bin bs=1k count=16384 
mke2fs
-F -m0 rd-ext2.bin 
mount
-t ext2 rd-ext2.bin /mnt -o loop 
tar
-C tgt -cf - . | tar -C /mnt -xf - 
umount
/mnt 
cp
rd-ext2.bin /tftpboot 
=============================
==
STEP
6: Give this bootargs in uboot prompt 
1.
setenv ipaddr 172.16.9.111; setenv serverip 172.16.9.110; usb reset; 
2.
setenv bootargs mem=88M ip=172.16.9.111 console=ttyO2,115200n8
root=/dev/ram0 rw initrd=0x81600000,16M ramdisk_size=16384 
3.
tftp 81600000 rd-ext2.bin 
4.
tftp 80000000 uImage 
5.
bootm 
For
2.6.36 kernel: setenv bootargs mem=88M ip=172.16.9.111
console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0x81600000,16M
ramdisk_size=16384 
For
3.0.4 kernel: setenv bootargs console=ttyO2,115200n8
root=/dev/ram0 rw ramdisk_size=32768 initrd=0x81600000,32M
As the Ramdisk size
increases the corresponding change should be reflected in:
(This
happens when files get added to the target root file system.)
- bootargs { mem
   and ramdisk_size parameters }
    
- kernel compilation
   { Main menu – Device Drivers – Block devices -  RAM block
   device support - Default RAM disk size (kbytes) }
   
(Use the
arm-none-linux-gnueabi-strip program to strip off unneeded headers
and debug information once an application or driver has been fully
debugged and ready for inclusion in the image. )
(Ramdisk is treated as a
block device)
2.2
How to Cross Compile a module?
$
sudo su
$
export ARCH=arm
$
export CROSS_COMPILE=arm-unknown-linux-gnueabi-
$
export PATH="/home/vinod/cctools/build/target/bin":$PATH
$
make
Makefile
obj-m+=hi.o
all:
 make
-C /home/vinod/files/beagle/linux-3.0.4/ M=$(shell pwd) modules
hi.c
#include
#include 
static
int __init hello_init(void)
{
    printk(KERN_INFO "Hello
example init \n");
    return 0;
}
static void
__exit hello_exit(void)
{
    printk(KERN_INFO "Hello
example exit
\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Vinod");
MODULE_DESCRIPTION("Simple
test module");
2.3
How to enable Ethernet(SMSC9514) in Linux 3.0.4 for BeagleBoard Xm?
https://github.com/nguillaumin/beagle-carputer/wiki/system-Customise-Kernel
https://bugs.launchpad.net/linux-linaro/+bug/622429
[Driver
Files:
drivers/net/usb/smsc95xx.c, drivers/net/usb/usbnet.c]
While
compiling the kernel select the following two options as compile time
modules:
The
   BeagleBoard-xM Ethernet adapter is in fact an Ethernet to USB
   adapter provided by an SMSC LAN9514:
Device
   Drivers – Network Device support – USB Network Adapters - SMSC
   LAN95XX based USB 2.0 10/100 ethernet devices
 
Enable
   support for USB 2.0 HUBs, the adapter being connected to the HUB:
Device
   Drivers – USB Support - EHCI HCD (USB 2.0) support
 
Check
on Target:  ifconfig,
ipaddr, ping 172.16.9.110
   {
To fix the ip address: ifconfig eth0 172.16.9.111 up }
[NOTE:
The same method didn't
work with 2.6.36 kernel]
2.4
How to flash(blink) an LED in BeagleBoard? 
sysfs is a
virtual file system. sysfs exposes the drivers for the hardware. 
GPIO
interfacing from userspace 
gpio-sysfs
(/sys/class/gpio) is the preferred method of gpio interfacing from
userspace. 
Getting
access to a GPIO: 
 The GPIO
number should be used. 
 {
For
example the usr1 led gpio number is 150 in BeagleBoard. }
 $ echo 150 >
/sys/class/gpio/export [To get control] 
 $ echo 150 >
/sys/class/gpio/unexport [To give out control] 
Getting
and setting direction: 
 echo "out"
> /sys/class/gpio/gpio150/direction [Set as o/p] 
 cat
/sys/class/gpio/gpio150/direction 
Getting
and setting state(value): 
 echo "1"
> sys/class/gpio/gpio150/value 
 echo "0"
> sys/class/gpio/gpio150/value 
Note
(150 is usr1
LED, 149 is usr0 ... You can also access expansion port GPIO that
way, say 168 for pin 24) 
cd
/sys/class/gpio 
echo 150 >
export [A new dir named gpio150 is created] 
cd gpio150/ 
 echo
"high" > direction 
 echo
"low" > direction 
OR 
 echo
"out">direction 
 echo
"1">value 
 echo
"0">value 
Unmount the
device: 
 cd
/sys/class/gpio/ 
 echo 150 >
unexport 
Links
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
C
– Source Code
/* 
* Blink usr1 led on
BeagleBoard - Pin number 150 
* Author: Vinod
Sasidharan
* Wednesday, Nov 2, 2011
*/
#include 
#include 
#include 
FILE *fp;
void writefile(FILE
*myfp,char *s,int num);
void writefile(FILE
*myfp,char *s,int num)
{
//Set pointer to
begining of the file
rewind(myfp);
//Write our value to
the file 
fwrite(s,
sizeof(char), num, myfp);
fclose(myfp);
}
int main()
{
char setval[4];
int toggle = 0;
printf("\n========================================\n");
printf("       
Blink usr1(PIN 150) led @ 1Hz ");
printf("\n========================================\n");
/*
*  1. Using sysfs
write 150 to /sys/class/gpio/export.
*  2. This would
create the folder gpio150. 
*/
if( (fp =
fopen("/sys/class/gpio/export","ab")) == NULL)
{
printf("Cannot
open export file...\n");
exit(1);
}    
strcpy(setval,"150");
/* Write 150 to the file */
writefile(fp,(char *)
&setval,3);
printf("Export
file accessed, new pin 150 now accessible...\n"); 
/* Set DIRECTION */
if ((fp =
fopen("/sys/class/gpio/gpio150/direction", "rb+"))
== NULL)
{
printf("Cannot
open direction file.\n");
exit(1);
}
//Write our value of
"out" to the file
strcpy(setval,"out");
writefile(fp, (char
*)&setval,3);
printf("Direction
set to output...\n");
//SET VALUE
//Open the LED's sysfs
file in binary for reading and writing, store file pointer in fp
if ((fp =
fopen("/sys/class/gpio/gpio150/value", "rb+")) ==
NULL)
{
printf("Cannot
open value file.\n");
exit(1);
}
//Write our value of
"1" to the file 
strcpy(setval,"1");
writefile(fp, (char
*)&setval,1);
printf("Value set
to 1...\n");
//-------------------------------------------------------------
//Run an infinite loop
- will require Ctrl-C to exit this program
while(1)
{
if ((fp =
fopen("/sys/class/gpio/gpio150/value", "rb+")) ==
NULL)
{
printf("Cannot
open value file.\n");
exit(1);
}
toggle = !toggle;
if(toggle)
{
//Write our
value of "1" to the file 
strcpy(setval,"1");
writefile(fp,
(char *)&setval,1);
printf("Value
set to 1...\n");
}
else
{
//Write our
value of "0" to the file 
strcpy(setval,"0");
writefile(fp,
(char *)&setval,1);
printf("Value
set to 0...\n");
}
//Pause for one
second
sleep(1);
}
//-------------------------------------------------------------
return 0;
}
ON
HOST
 $
arm-unknown-linux-gnueabi-gcc-4.3.5
-o blink blink.c 
ON
TARGET
 $
tftp
-g -r blink 172.16.9.110 
 $
chmod a+x blink 
 $
./blink
{ctrl + c to exit}
2.5
How to run a web server in BeagleBoard? 
On target  {
with IP Address – 172.16.9.111 }:
 $ cd
/opt
 $ mkdir
www
 $ cd
www
 $ vi
index.html
  Welcome
to busybox – By Vinod 
 $ busybox
httpd -h /opt/www
On Host:
 Open web
browser and type: http://172.16.9.111
LINKS
- 
 
2.6
How to mount the root file system over NFS?
Enable
ethernet driver for target
While
compiling the kernel enable the ethernet drivers properly before
trying NFS. See section 2.3 “How to enable ethernet for beagle”.
On Host
Install
and run the nfs server. The nfs directory is set as “/home/vinod/tgt”
and root file system has been installed into this.
Update
the exports file with the following line:
$
vi /etc/exports
 /home/vinod/tgt
*(rw,insecure,no_root_squash,no_subtree_check) 
For
Ubuntu's NFS server:
$
service nfs-kernel-server status
$ 
/etc/init.d/nfs-kernel-server status
On Target
 STEPS:
 Type these in uboot prompt 
setenv
 ipaddr 172.16.9.111; setenv serverip 172.16.9.110; usb reset;
 
setenv bootargs
 console=ttyO2,115200n8 root=/dev/nfs rw
 nfsroot=172.16.9.110:/home/vinod/tgt ip=172.16.9.111::255.255.255.0
 nolock,rsize=1024,wsize=1024 rootdelay=2
 
tftp
 80000000 uImage 
 
 
bootm
 
2.7
How to boot kernel using initramfs for root file system?
A system using
initramfs as its root file system doesn't even need a single file
system driver built into the kernel, because there are no block
devices to interpret as file systems. Just files living in memory. 
The
initramfs enables initial file system and init program to reside
in kernel memory cache, rather than on a ramdisk, as with initrd
filesystems.
On
Host
NOTE:
To
be able to detect initramfs by kernel properly, the top level
directory in the root file system (/home/vinod/tgt) has to contain a
program called init.
For example, this can be done by using a soft link from top level
init to ./bin/busybox (assuming you are using BusyBox in your
initramfs)system
$
cd /home/vinod/tgt
$
ln -s ./bin/busybox init
$
cd ~/files/beagle/linux-3.0.4/  { Target
Linux source code directory }
$
make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- menuconfig
General
setup - Initial RAM filesystem and RAM disk (initramfs/initrd)
support - Initramfs source file(s) - “/home/vinod/tgt”
$
make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- uImage -j3
$
du -h arch/arm/boot/uImage 
  7.0M arch/arm/boot/uImage
$
cp arch/arm/boot/uImage /tftpboot
On Target
 STEPS:
 Type these in uboot prompt 
setenv
   ipaddr 172.16.9.111; setenv serverip 172.16.9.110; usb reset;
 
tftp
   80000000 uImage 
   
 
bootm
 
LINKS
- 
 
- 
 
2.8
How to enable core dump?
The core dump
can be enabled by:
 $ ulimit 
 $ ulimit -a
 $
ulimit -c unlimited 
When
the Segmentation fault (SIGSEGV: A Linux kernel signal that is
generated on illegal memory access by a user process.) occurs, if the
core dumping feature is enabled, a file named core
would be obtained in the
same directory.
Core
dump analysis using gdb: 
  $ gcc -g -o
hi hi.c
  $ ./hi
  Segmentation
fault (core dumped) 
  $ gdb hi core
 Commands used
in gdb:
   l(list),
p(print) ptr,  bt(backtrace), frame 0/1/2 (stack frame related),
2.9
How to create cscope database for a particular kernel build?
The Linux
kernel Makefile supports building the database that cscope (GUI:
cbrowser) uses:
 $ make
ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- cscope 
3.
ToolChain
 http://permalink.gmane.org/gmane.linux.busybox/31535
 http://elinux.org/ARMCompilers
Use
Cross-Tool
Ng for creating the toolchain
 http://www.labbookpages.co.uk/electronics/beagleBoard/custom.html http://linuxdeveloper.blogspot.com/2011/08/build-your-own-cross-compilation-tool.html
Steps:
- 
 
- 
 
4.
Cross-Compiling Linux
 
  git clone
git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git
[ Linux 3.0.4 → omap2plus_defconfig ]
export
CROSS_COMPILE=arm-unknown-linux-gnueabi-
 export
ARCH=arm 
 make omap2plus_defconfig/spear300_defconfig 
 [copies default board
configuration from "arch/arm/configs/" to .config] 
 make
menuconfig/oldconfig/xconfig 
 make uImage
 
-----------------------------
  # just to make sure
everything is clean
  1)  make ARCH=arm
CROSS_COMPILE=arm-unknown-linux-gnueabi- distclean 
  2) make
ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi-      
  omap2plus_defconfig
  #change config, if
needed
  3) make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi-
menuconfig 
  4) make ARCH=arm
CROSS_COMPILE=arm-unknown-linux-gnueabi- uImage 
Adding Kernel driver
modules to the root file system:             
  5) make
ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- modules
 
6) make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi-
INSTALL_MOD_PATH=/home/vinod/tgt modules_install
 { The kernel modules
would be copied to the /home/vinod/tgt/modules directory}
 $ cd
/home/vinod/tgt/modules
 $
arm-none-linux-gnueabi-strip `find . -name "*.ko"`  {To
remove the debug info}
“
du -h “ & sdiff
have been used to see the differences in size after and before using
strip.
The total size of the
modules folder has been reduced to 1.8MB from 22MB.
 
http://elinux.org/BeagleBoardLinuxKernel
5.
Cross-Compiling BusyBox
 git clone git://busybox.net/busybox.git
 [http://www.busybox.net/source.html]
http://rcs.uncc.edu/wiki/index.php/Creating_Root_File_System#Using_BusyBox
Once the Cross Compiler
is set you can setup BusyBox with the following commands:
- make ARCH=arm
 CROSS_COMPILE=arm-unknown-linux-gnueabi- defconfig 
 
  
- make ARCH=arm
 CROSS_COMPILE=arm-unknown-linux-gnueabi- menuconfig 
 
 
- This opens a
  commandline menu, make the following changes: 
  
  
- BusyBox Settings
   --> Installation Options --> BusyBox Installation Prefix: 
   
   
- ../rootfs 
    
    {clean,
    mrproper, distclean}
    
 
 
 
- make ARCH=arm
 CROSS_COMPILE=arm-unknown-linux-gnueabi- 
 
 
 
- make ARCH=arm
 CROSS_COMPILE=arm-unknown-linux-gnueabi-
 CONFIG_PREFIX=/home/vinod/tgt install 
 
 
- Copies the
  executables to the rootfs directory 
  
  
 
LINKS
- http://www.ibm.com/developerworks/library/l-busybox/
   
   
6.
Cross-Compiling U-Boot
$
git clone git://git.denx.de/u-boot.git u-boot-main    [Source
Code]
$
cd u-boot-main
make
ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- distclean 
make
ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- omap3_beagle_config
make
ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- 
[arm-none-linu-gnueabi
 - if CodeSourcery cross compiler is used]
NOTE:
With the above compilation u-boot gets loaded properly, but the
tftpboot command is not present. Hence do the following steps:
 $
vi include/configs/omap3_beagle.h {and define the following}
  #define
CONFIG_USB_ETHER 1 
  #define CONFIG_USB_USBNET 1 
  #define
CONFIG_CMD_NET    {
#undef
CONFIG_CMD_NET could be present}
  #define CONFIG_CMD_PING 
To
enable ethernet in u-boot & boot linux for beagle
setenv
usbethaddr
0:0:1:2:3:4 
setenv
ipaddr 192.168.1.6 
setenv
serverip 192.168.1.2 
usb
reset 
ping
192.168.1.2 
setenv
bootargs mem=88M ip=172.16.9.111 console=ttyO2,19200n8 root=/dev/ram0
rw initrd=0x81600000,16M ramdisk_size=16384 
tftp
81600000 rd-ext2.bin 
tftp
80000000 uImage 
bootm
7.
Making Root File System
http://processors.wiki.ti.com/index.php/Creating_a_Root_File_System_for_Linux_on_OMAP35x
Bootargs
for RFS
 1. NAND(JFFS2):
root=/dev/mtdblock4 rw rootfstype=jffs2
 2. RAMDISK:
root=/dev/ram0 rw ramdisk_size=32768 initrd=0x81600000,32M
 3.
MMC/SD:
root=/dev/mmcblk0p2 rw rootwait
 4. NFS:
root=/dev/nfs rw nfsroot=172.16.9.110:/home/vinod/tgt
ip=172.16.9.111::255.255.255.0 nolock,rsize=1024,wsize=1024
rootdelay=2Creating
RAMDISK
 dd
if=/dev/zero of=ramdisk bs=1k count=32768
 mkfs.ext2
ramdisk
 mount -o loop ramdisk /mnt
 tar -xvjf fs.tar.bz2 -C
/mnt
 {Other
methods to copy may be fine}
 umount
/mnt
 gzip ramdisk
8. Links
- http://beagleboardxm.blogspot.com/
  
- http://processors.wiki.ti.com/index.php/Creating_a_Root_File_System_for_Linux_on_OMAP35x
  
- http://rcs.uncc.edu/wiki/index.php/Creating_Root_File_System#Using_BusyBox
  
- http://old.nabble.com/-U-Boot--BeagleBoard-xM%3A-Ethernet-over-USB-supported---td30851592.html
  
- https://github.com/nguillaumin/beagle-carputer/wiki/system-Customise-Kernel
  
- http://elinux.org/Category:ECE497
  
- http://elinux.org/EBC_Embedded_Beagle_Class_Topics
  
- https://groups.google.com/forum/?hl=en#!msg/beagleboard/20rM-r8C2YY/hVZiN2ahI8YJ
   [Beagle Board GPIO]
  
- http://elinux.org/ECE497_-_32-bit_Embedded_Linux,_Rose-Hulman
  
- 
 
 9.
Notes
Usage of
tar
Compress contents of directory tgt to fs.tar.bz2:
  cd tgt
  tar
cjfv fs.tar.bz2 .  
Extract
contents of fs.tar.bz2 to directory vin: 
  tar
xjfv fs.tar.bz2 -C vin
Usage
of tftp in busybox (To download a file hi.ko from host)
  tftp
-g -r hi.ko 172.16.9.110 
Create
a soft link (Create a soft link named init to ./bin/busybox)
  ln
-s ./bin/busybox init
Change
permission of all files in a folder
  chmod
-R 777 myfolder/
Removing
lock of serial port 
(e.g.:
When minicom shows the error "Device
/dev/ttyS0 is locked." )
  rm
/var/lock/LCK..ttyS0 
Setting
static ip
  ifconfig
eth0 172.16.9.110 netmask 255.255.255.0 up
10.
New toolchain & os-less experiments
The
new toolchain from codesourcery(now mentor graphics) is being used. 
11.
Require tools for cross-compiling on Ubuntu
automake
 
bison
 
curl 
 
 
cvs 
 
 
flex 
 
 
g++ 
 
 
gawk 
 
 
libncurses5-dev
  
 
libtool
  
 
texinfo 
 
 
12.
How to avoid "mkimage" command not found - U-Boot images
will not be built error while cross-compilig linux kernel?
Install
uboot-mkimage package to avoid this error.
13.
How to cross-compile X-Loader?
 git
clone git://gitorious.org/x-load-omap3/mainline.git x-loader
As
above mentioned, the SRAM in beagleboard-xm is very tiny as 64K, the
u-boot image size is almost 196K, so beagleboard-xm can not use
u-boot as MLO. The x-load is used here, which can be considered as
u-boot loader, and it’s size is around 24K.
Get
mainline x-load source code from 
git clone git://gitorious.org/x-load-omap3/mainline.git
make CROSS_COMPILE=arm-none-linux-gnueabi- omap3530beagle_config
make CROSS_COMPILE=arm-none-linux-gnueabi-
Although
beagleboard-xm use DM3735 process, there is updated config file in
x-load mainline’s tree. So it is ok for reuse omap3530beagle_config
file.
After building, x-load.bin is generated as raw executable binary.
As above mentioned about non-XIP image format, the size and address
should be added at image’s first 16 bytes. So use signGP scipt to
do it. The source code of signGP is
http://beagleboard.googlecode.com/files/signGP.c
 $ ./signGP ./x-load.bin
The signGP tool will create a .ift file, rename the x-load.bin.ift to MLO 
 $ mv x-load.bin.ift MLO
Arm Tool chain 2009:
https://sourcery.mentor.com/GNUToolchain/release858?lite=arm
How
 to load files(rd-ext2.bin & uImage) from mmc card and boot
 Linux?
 
 In
u-boot: 
  mmc
rescan
  fatload
mmc 0:1 81600000 rd-ext2.bin
  setenv
bootargs mem=88M ip=172.16.9.111 console=ttyO2,19200n8 root=/dev/ram0
rw initrd=0x81600000,16M ramdisk_size=16384 
  fatload
mmc 0:1 80000000 uImage 
  bootm