Editing Linuxstamp
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
[[Image:linuxstamp_top_02.jpg]] | [[Image:linuxstamp_top_02.jpg]] | ||
+ | == Status == | ||
+ | We now have working linuxstamp prototypes. There are a few minor hardware changes needed, and then we will make a production run. | ||
== Description == | == Description == | ||
The Linuxstamp is designed to be a general purpose processor module. It is designed to work as a stand alone module (SD card, Ethernet and USB/Serial converter are all on the module). This allows all initial development to be done without a motherboard, but for integration into a specific project a motherboard with specific features could be designed. Check out the start of the first mother board for the Linuxstamp, [http://opencircuits.com/Linuxstamp_Mboard_1 Mboard 1]. | The Linuxstamp is designed to be a general purpose processor module. It is designed to work as a stand alone module (SD card, Ethernet and USB/Serial converter are all on the module). This allows all initial development to be done without a motherboard, but for integration into a specific project a motherboard with specific features could be designed. Check out the start of the first mother board for the Linuxstamp, [http://opencircuits.com/Linuxstamp_Mboard_1 Mboard 1]. | ||
− | |||
− | |||
− | |||
== Features == | == Features == | ||
− | * Atmel AT91RM9200 processor (Arm9 processor with MMU | + | * Atmel AT91RM9200 processor (Arm9 processor with MMU) |
* 32MB SDRAM (Only limited by 1x 54-TSOP SDRAM chip) | * 32MB SDRAM (Only limited by 1x 54-TSOP SDRAM chip) | ||
* 8MB SPI Dataflash | * 8MB SPI Dataflash | ||
Line 22: | Line 21: | ||
All files for this project are licensed under the GNU GPL V2 | All files for this project are licensed under the GNU GPL V2 | ||
− | == | + | == Project files == |
− | Warning!!! | + | Warning!!! This is an untested design. As testing results are available I will post them on this site. |
− | * [ | + | * [[Media:linuxstamp-rev111-top.pdf|PCB Top view (pdf)]] |
− | + | * [[Media:linuxstamp-rev111-bottom.pdf|PCB Bottom view (pdf)]] | |
− | + | * [[Media:linuxstamp-rev111-sch.pdf|Schematic (pdf)]] | |
− | * [ | + | * [http://greenflaginc.com/linuxstamp-20070513.zip Project zip file] |
− | |||
− | |||
== Power == | == Power == | ||
Line 35: | Line 32: | ||
== Minicom & the debug port == | == Minicom & the debug port == | ||
− | The | + | The USB device port on the Linuxstamp does not connect directly to the AT91RM9200 it connects to the FT232R chip. The FT232R is a USB/serial converter. The FT232R chip has drivers for both Windows and Linux, but the Linux drivers are included in later kernels. When you plug the Linuxstamp into your host (Linux) machine a device should appear '''/dev/ttyUSB0''' (I think the postfix number will increment as you add more devices). '''/dev/ttyUSB0''' will behave as any other serial port now. '''Minicom''' is the standard program to access the serial port in Linux. The first time you run minicom you will have to be root in order to do the setup, after that you can change the permissions on /dev/ttyUSB0 so any user can run minicom. To enter configuration mode in minicom type '''CTRL-A o''', now scroll down to '''Serial port setup'''. Use the letters to navigate. You will want the device to be '''/dev/ttyUSB0''' and '''Bps/Par/Bits''' to read '''115200 8N1'''. Connection to the board is important for loading Atmel's tiny program and u-boot, but once the board is working it might not be as important. |
− | + | <br><br> | |
− | When you plug the Linuxstamp into your host (Linux) machine a device should appear '''/dev/ttyUSB0''' (I think the postfix number will increment as you add more devices). '''/dev/ttyUSB0''' will behave as any other serial port now. '''Minicom''' is the standard program to access the serial port in Linux. The first time you run minicom you will have to be root in order to do the setup, after that you can change the permissions on /dev/ttyUSB0 so any user can run minicom. To enter configuration mode in minicom type '''CTRL-A o''', now scroll down to '''Serial port setup'''. Use the letters to navigate. You will want the device to be '''/dev/ttyUSB0''' and '''Bps/Par/Bits''' to read '''115200 8N1''' | + | The built in xmodem in minicom does not seem to work with the hardware bootloader in the AT91RM9200. The folks at [http://www.koansoftware.com/it/art.php?art=68 Koan] have created a workaround. The one thing you have to do is edit the .c file for the proper serial port ttyUSB0 in my case. |
− | |||
− | The | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== nfs & tftp == | == nfs & tftp == | ||
Nfs (network file system) and tftp (trivial file transfer protocol) are two servers you will want running on your host machine. Nfs is useful for hosting the root file system of the Linuxstamp. Tftp is useful for u-boot to retrieve the kernel from. There are many other websites on nfs and tftp, but I will try and go over a simple setup. I would suggest being behind a firewall before trying either of these setups as neither is secure. I wrote this using a Fedora 7 system. First make sure you have nfs installed. | Nfs (network file system) and tftp (trivial file transfer protocol) are two servers you will want running on your host machine. Nfs is useful for hosting the root file system of the Linuxstamp. Tftp is useful for u-boot to retrieve the kernel from. There are many other websites on nfs and tftp, but I will try and go over a simple setup. I would suggest being behind a firewall before trying either of these setups as neither is secure. I wrote this using a Fedora 7 system. First make sure you have nfs installed. | ||
− | + | *$ '''yum install nfs-utils nfs-utils-lib portmap system-config-nfs''' | |
− | + | Now to make sure the service is enabled run: | |
− | + | *$ '''serviceconf''' and make sure '''nfs''' and '''nfs lock''' are checked | |
− | |||
− | |||
− | |||
− | |||
− | Now to make sure the service is enabled run | ||
− | |||
Now edit '''/etc/exports''' you should add a line like this '''/path_to_nfs_root/ *(rw,no_root_squash,insecure)'''. Now restart nfs. | Now edit '''/etc/exports''' you should add a line like this '''/path_to_nfs_root/ *(rw,no_root_squash,insecure)'''. Now restart nfs. | ||
− | + | *$ '''/etc/init.d/nfs restart''' | |
− | + | You can test this with | |
− | + | *$ '''mount -t nfs server_name:/path_to_nfs_root /path_to_test_mount''' | |
− | |||
− | You can test this | ||
− | |||
Now on to tftp. Make sure it is installed. | Now on to tftp. Make sure it is installed. | ||
− | + | *$ '''yum install tftp-server''' | |
This will create a file '''/etc/xinetd.d/tftp'''. In this file you will want to change '''disable''' from '''yes''' to '''no'''. | This will create a file '''/etc/xinetd.d/tftp'''. In this file you will want to change '''disable''' from '''yes''' to '''no'''. | ||
Now make a test file. | Now make a test file. | ||
− | + | *$ '''cd /tftpboot''' | |
− | + | *$ '''echo hello > file''' | |
Now we can test it | Now we can test it | ||
− | + | *$ '''tftp -v server_name -c get tmp''' | |
− | |||
− | |||
− | |||
− | |||
− | == Cross | + | == Cross Compilier == |
− | In order to compile for the AT91RM9200 we need to build a cross compilier. Dan Kegel has created a very useful [http://kegel.com/crosstool/ tool] for building a cross | + | In order to compile for the AT91RM9200 we need to build a cross compilier. Dan Kegel has created a very useful [http://kegel.com/crosstool/ tool] for building a cross compiliers. I am using Fedora 6 (x86_64) as my host system. After downloading and extracting crosstool (I was using version 0.43) I made two small changes. In the "demo-arm.sh" file I changed the eval line to |
*"'''eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest'''"<br> | *"'''eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest'''"<br> | ||
In the "arm.dat" file I changed the TARGET to "arm-linux" (By default u-boot looks for arm-linux-* tools). Now if you run "demo-arm.sh" you should get a cross compilier. | In the "arm.dat" file I changed the TARGET to "arm-linux" (By default u-boot looks for arm-linux-* tools). Now if you run "demo-arm.sh" you should get a cross compilier. | ||
− | |||
− | |||
== Booting == | == Booting == | ||
Line 97: | Line 63: | ||
== U-boot == | == U-boot == | ||
− | First we need | + | First we need the u-boot source found [http://sourceforge.net/project/showfiles.php?group_id=65938 here] (I was using version 1.1.6). If you have not yet built a cross compilier now would be a good time to do so (See the cross compilier section above). Now you can do a test for the Atmel AT91RM9200 DK board. |
* $ '''make at91rm9200dk_config''' | * $ '''make at91rm9200dk_config''' | ||
* $ '''make''' | * $ '''make''' | ||
This should give you a "u-boot.bin" file. We will have to write a board specific configuration file for the Linuxstamp. We should be able to base it off the the Atmel DK board. If you look at "/u-boot-1.1.6/include/configs/at91rm9200dk.h" you can see the configuration for the DK board. | This should give you a "u-boot.bin" file. We will have to write a board specific configuration file for the Linuxstamp. We should be able to base it off the the Atmel DK board. If you look at "/u-boot-1.1.6/include/configs/at91rm9200dk.h" you can see the configuration for the DK board. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Busybox == | == Busybox == | ||
Line 122: | Line 81: | ||
== Building the Linux Kernel == | == Building the Linux Kernel == | ||
− | If you have ever built the kernel for your desktop, then cross-compiling the kernel isn't that much harder. First get the latest kernel from [http://kernel.org/ kernel.org] (I was using 2.6.23-rc9), then get the AT91RM9200 patch from [http://maxim.org.za/at91_26.html here]. After you unpack both of these you can apply the patch | + | If you have ever built the kernel for your desktop, then cross-compiling the kernel isn't that much harder. First get the latest kernel from [http://kernel.org/ kernel.org] (I was using 2.6.23-rc9), then get the AT91RM9200 patch from [http://maxim.org.za/at91_26.html here]. After you unpack both of these you can apply the patch. |
* $ '''patch -p1 < 2.6.23-rc3-at91.patch''' | * $ '''patch -p1 < 2.6.23-rc3-at91.patch''' | ||
Now lets take a look at the default configurations | Now lets take a look at the default configurations | ||
Line 132: | Line 91: | ||
Now we're are ready to build the kernel. You will have to have the u-boot tool '''mkimage''' in the '''PATH''' for this to work | Now we're are ready to build the kernel. You will have to have the u-boot tool '''mkimage''' in the '''PATH''' for this to work | ||
* $ '''make ARCH=arm CROSS_COMPILE=arm-linux- uImage''' | * $ '''make ARCH=arm CROSS_COMPILE=arm-linux- uImage''' | ||
− | |||
− | |||
− | |||
− | |||
== Minimal filesystem == | == Minimal filesystem == | ||
Line 143: | Line 98: | ||
* $ '''mknod /staging_path/dev/console c 5 1''' | * $ '''mknod /staging_path/dev/console c 5 1''' | ||
The '''c''' says this is a character device. The '''5''' is the major node, and the '''1''' is the minor node. | The '''c''' says this is a character device. The '''5''' is the major node, and the '''1''' is the minor node. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Dropbear SSH == | == Dropbear SSH == | ||
One of the first non busybox tools you will want is SSH. Dropbear is a small SSH client/server. I was able to get version 0.50 working. | One of the first non busybox tools you will want is SSH. Dropbear is a small SSH client/server. I was able to get version 0.50 working. | ||
− | |||
− | |||
− | |||
* $ '''./configure --host="arm-linux" --disable-zlib --prefix=/staging_path''' | * $ '''./configure --host="arm-linux" --disable-zlib --prefix=/staging_path''' | ||
* $ '''make all''' | * $ '''make all''' | ||
Line 176: | Line 109: | ||
You will also have to have the devpts filesystem mounted. | You will also have to have the devpts filesystem mounted. | ||
− | == | + | == Eagle Stuff == |
− | + | I will put tools and libraries here. | |
− | + | * I would post a cam job, but opencircuits won't let me upload a .cam file | |
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Links == | == Links == | ||
Line 198: | Line 118: | ||
*[http://cadsoft.de/ Cadsoft.de]: Free (as in beer) tools for schematic and PCB design | *[http://cadsoft.de/ Cadsoft.de]: Free (as in beer) tools for schematic and PCB design | ||
*[http://openhardware.wordpress.com/ openhardware.wordpress.com]: Here is my openhardware blog | *[http://openhardware.wordpress.com/ openhardware.wordpress.com]: Here is my openhardware blog | ||
− | |||
*[http://www.atmel.com/dyn/products/app_notes.asp?family_id=605 App notes]: for Atmel arm processors | *[http://www.atmel.com/dyn/products/app_notes.asp?family_id=605 App notes]: for Atmel arm processors | ||
− | *[[ | + | *[http://www.jendylabs.com/ Jendy Labs] |
− | *[http://wiki.emqbit.com/ | + | *[http://opencircuits.com/Linuxstamp_Mboard_1 Mborad 1] for the Linuxstamp |
− | + | *[http://wiki.emqbit.com/wiki ECB AT91] This is another open source project similar to the Linuxstamp. They have somve very good documentation. | |
+ | |||
+ | == Pricing == | ||
+ | The parts cost for qty 1 is $75 from digikey, and $55 for qty 100<br> | ||
+ | I'm sure this can be greatly reduced with higher quantity<br> | ||
+ | We will make a small run soon, and I will let you know when these are available.<br> | ||
+ | |||
+ | == Discussion == | ||
+ | |||
+ | Can I plug a USB peripheral into the Linuxstamp, such as a USB Wifi adapter? --[[User:DavidCary|DavidCary]] 22:02, 17 April 2007 (PDT)<br> | ||
+ | :Yes, any USB device that is supported by the kernel should work with the Linuxstamp. --[[User:Linuxvolts|Linuxvolts]] 23:15, 18 April 2007 (PDT) | ||
− | + | This is not a true USB port is it? Its just a usb serial peripheral port, therefore USB stick will not work. | |
− | + | :Should be answered by the last answer, too. An USB stick is also USB peripheral^^ --SebDE | |
− | + | This is not a USB host....it (Linuxstamp)is seen as the peripheral surely? | |
+ | :From the Features: | ||
+ | :''1x USB host port (allows wifi adapters, flash drives and other USB devices to be used)'' | ||
+ | :You can plug in any USB device that is supported by the kernel. The Linuxstamp is not supposed to be plugged via USB to a PC. | ||
+ | :--SebDE | ||
− | + | The AT91RM9200 has 2x USB host ports and 1x device port. I bring out one of the USB host ports directly from the chip to a USB A connector. There is also a mini USB B connector on the board this is connected to the FT232RQ (USB/serial converter) which in turn is connected to the debug serial port on the AT91RM9200. So the linuxstamp can be both a USB host and a USB device. --[[User:Linuxvolts|Linuxvolts]] 20:10, 4 July 2007 (PDT) | |
− | |||
− | |||
== Contact == | == Contact == | ||
For further questions or comments please contact Paul (pthomas8589 _at_ gmail _dot_ com) | For further questions or comments please contact Paul (pthomas8589 _at_ gmail _dot_ com) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Category:Projects]] | [[Category:Projects]] |