Re: Embedded Linux development
Microbit_Ubuntu <microbit <at> virginbroadband.com.au>
2010-01-03 13:58:03 GMT
On Fri, 2010-01-01 at 13:34 -0800, Pavan Kandepet wrote:
> I want to get involved and eventually get a job doing embedded
> Linux development. I had a couple of questions for folks who do
> this and could give me some advice. I am specifically interested
> in device driver development and embedded networking.
> I am competent in userland Linux programming and have done
> plenty of kernel compilations etc... I am also an electrical engineer
> and don't have problems reading processor or device manuals etc...
> I know I could get a development board and start working right away,
> but is there any specific development board that you folks would
> recommend which offers great Linux support? I should be able read and
> understand how most of the drivers and networking code work. ( I am
> interested in ARM processor boards). I want to tweak drivers and play
> Is there any way I could find out what new open source device drivers are
> being developed so that I could contribute? This would be a great place to
> If there are any embedded Linux developers on this mailing list, how did
> you get started? Any advice is greatly appreciated, thanks and have a great
> new year.
> To unsubscribe from this list: send an email with
> "unsubscribe kernelnewbies" to ecartis <at> nl.linux.org
> Please read the FAQ at http://kernelnewbies.org/FAQ
> If there are any embedded Linux developers on this mailing list, how did
> you get started?
I've been into embedded for years, but only recently did I notice nowadays Embedded Linux is a must (as an
Entry level made my head spin, but after some research I found that Olimex had a particularly good deal
when it comes to stepping into the ARM Linux world.
I guess it depends on one last criteria - whether you want full graphics (ie. LCD & touch screen etc), or are
a terminal interface. I chose the latter, as I thought it's already complex enough without graphics, let alone....
(I'm planning to expand to fuller graphics at some stage when I'm more comfortable)
So I settled on the SAM9-L9260 Olimex board :
You can see the full heads up at the URL under SAM9-L9260. I found it a very good deal, considering the low
The board comes turnkey "preflashed" for the first giant step..
It uses an Atmel SAM9 (ARM926ej-S, v5TEJ) <at> 180/200 MHz. It's got 512 MB of NandFlash, 64 MB SDRAM, USB
host/device, Ether 100M, SD/MMC/SDIO, full RS232 (+2 extra ports), standard JTAG.. etc
I've already crossed many hurdles and would be happy to pool resources or guide you if you get stuck on entry etc.
For tools, I ended up with Buildroot (2009.08) so I can completely
customise everything incl my rootfs. I'm using (ARM)GCC 4.3.3 on Ubuntu
9.10 host wise.
While still learning, I've updated quite a few things, plus struggled
through various issues, as I found Linux help in the embedded world
seems to be a lot more scarce than on PCs.
I've patched the latest U-boot version to run on that L9260 board (the
PHY support is missing), latest stable kernel so you can use menuconfig
The result so far is that my embedded board boots in about ~18 secs with
a modest rootfs (JFFS2). If you're curious about that, I'm attaching a
log at end of this post of my bootlog on SAM9-L9260.
If you're interested in this, I can elaborate further - as I too am
ultimately interested in becoming proficient writing kernel space
Finally, since a while, I've quite taken to Eclipse/Galileo to do
user/kernel cross development and source level debugging. That was a day
and a half on its own all right... especially to get module stuff going
(getting kgdb to work on ARM9 iow source level remote target debug, but
a couple of helpful members here clued me in
Wrt. open source development, as a "test" I'm planning to add Linux
support for SDW-820 SDIO WiFi card. About a year ago I wrote my own
'from scratch' ARM based driver for it, but I don't know yet how to deal
with the open source issue vs. NDA I had to sign with Sigtec to get some
example partial driver WINCE code. I reverse engineered how to talk to
the IPN2128 Inprocomm MAC chipset. It took me over a month to figure out
how that beastie is driven (it's very complicated) , but I have a
completely functional WiFi driver.
That's what's going on here wrt. planned driver development.
** Here's the log to give you idea of L9260 board :
# The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
Requesting system reboot
>AT91Bootstrap loading from 0x8400...
U-Boot 2009.03 (Aug 14 2009 - 01:32:23)
DRAM: 64 MB
NAND: 512 MiB
Nb pages: 4096
Page Size: 528
Size= 2162688 bytes
Logical address: 0xD0000000
Area 0: D0000000 to D00041FF (RO) Bootstrap
Area 1: D0004200 to D00083FF Environment
Area 2: D0008400 to D0041FFF (RO) U-Boot
Area 3: D0042000 to D0251FFF Kernel
Area 4: D0252000 to D020FFFF FS
macb0: PHY present at 1
macb0: link up, 100Mbps full-duplex (lpa: 0x45e1)
Hit any key to stop autoboot: 3 2 1 0
## Booting kernel from Legacy Image at 22200000 ...
Image Name: Linux-22.214.171.124
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1622792 Bytes = 1.5 MB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
done, booting the kernel.
Linux version 126.96.36.199 (kris <at> Ubuntu) (gcc version 4.3.3 (GCC) ) #14
PREEMPT Sun Aug 23 03:00:55 EST 2009
CPU: ARM926EJ-S  revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Olimex SAM9-L9260
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 180 MHz, master 90 MHz, main 18.432 MHz
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2
AT91: 96 gpio irqs in 3 banks
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
console [ttyS0] enabled
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 61444KB available (3056K code, 264K data, 92K init)
Calibrating delay loop... 89.70 BogoMIPS (lpj=448512)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 520 bytes
NET: Registered protocol family 16
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
audit: initializing netlink socket (disabled)
type=2000 audit(0.480:1): initialized
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 120
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
atmel_usart.1: ttyS1 at MMIO 0xfffb0000 (irq = 6) is a ATMEL_SERIAL
atmel_usart.2: ttyS2 at MMIO 0xfffb4000 (irq = 7) is a ATMEL_SERIAL
loop: module loaded
eth0: Atmel MACB at 0xfffc4000 irq 21 (4a:72:ac:3e:e1:fa)
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:01, irq=-1)
Driver 'sd' needs updating - please use bus_type methods
NAND device: Manufacturer ID: 0xec, Chip ID: 0xdc (Samsung NAND 512MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 384 at 0x000003000000
Creating 2 MTD partitions on "NAND 512MiB 3,3V 8-bit":
0x000000000000-0x000000400000 : "Bootloader Area"
0x000000400000-0x000020000000 : "User Area"
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
at91_ohci at91_ohci: irq 20, io mem 0x00500000
usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: AT91 OHCI
usb usb1: Manufacturer: Linux 188.8.131.52 ohci_hcd
usb usb1: SerialNumber: at91
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
mice: PS/2 mouse device common for all mice
Registered led device: led_stat
Registered led device: led_pwr
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 17
NET: Registered protocol family 15
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
VFS: Mounted root (jffs2 filesystem) on device 31:1.
Freeing init memory: 92K
init started: BusyBox v1.14.3 (2010-01-03 02:04:55 EST)
Populating /dev using udev: done
Starting portmap: done
Initializing random number generator...done.
udhcpc (v1.14.3) started
Sending select for 192.168.1.4...
eth0: link up (100/Full)
Lease of 192.168.1.4 obtained, lease time 86400
route: SIOCDELRT: No such process
adding dns 192.168.1.1
Starting sshd: OK
Welcome to Buildroot
L9260 login: root
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis <at> nl.linux.org
Please read the FAQ at http://kernelnewbies.org/FAQ