Lego Mindstorms EV3 Intro ===== This is the buildroot basic board support for the Lego Mindstorms EV3 programmable brick. No support for sensors and drivers is provided for the moment. The Lego Mindstorms EV3 brick comprises a Texas Instruments AM1808 SoC, with an ARM 926EJ-S main processor running at 300 MHz. See: - https://en.wikipedia.org/wiki/Lego_Mindstorms_EV3 - http://www.lego.com/en-us/mindstorms/products/ev3/31313-mindstorms-ev3/ - http://www.ti.com/product/am1808 The buildroot configuration uses the Linux kernel of the ev3dev project. See: - http://botbench.com/blog/2013/07/31/lego-mindstorms-ev3-source-code-available/ - https://github.com/mindboards/ev3sources Note that the EV3 configuration uses gcc 4.7, as the boot is broken with gcc 4.8. How it works ============ Boot process : -------------- The u-boot on-board the EV3 brick has provision to boot a Linux kernel from the external µSD card. It will try to load a uImage from the first µSD card partition, which must be formatted with a FAT filesystem. How to build it =============== Configure Buildroot ------------------- The lego_ev3_defconfig configuration provides basic support to boot on the Lego Mindstorms EV3 programmable brick: $ make lego_ev3_defconfig Build everything ---------------- Note: you will need to have access to the network, since Buildroot will download the packages' sources. $ make Result of the build ------------------- After building, you should obtain this tree: output/images/ ├── rootfs.ext2 ├── rootfs.ext3 -> rootfs.ext2 └── uImage Prepare your SDcard =================== The following µSD card layout is recommended: - First partition formated with a FAT filesystem, containing the uImage. - Second partition formatted as ext2 or ext3, containing the root filesystem. Create the SDcard partition table ---------------------------------- Determine the device associated to the SD card : $ cat /proc/partitions Let's assume it is /dev/mmcblk0 : $ sudo fdisk /dev/mmcblk0 Delete all previous partitions by creating a new disklabel with 'o', then create the new partition table, using these options, pressing enter after each one: * n p 1 2048 +10M t c * n p 2 22528 +256M Using the 'p' option, the SD card's partition must look like this : Device Boot Start End Blocks Id System /dev/mmcblk0p1 2048 22527 10240 c W95 FAT32 (LBA) /dev/mmcblk0p2 22528 546815 262144 83 Linux Then write the partition table using 'w' and exit. Make partition one a DOS partition : $ sudo mkfs.vfat /dev/mmcblk0p1 Install the binaries to the SDcard ---------------------------------- Remember your binaries are located in output/images/, go inside that directory : $ cd output/images Copy the Linux kernel: $ sudo mkdir /mnt/sdcard $ sudo mount /dev/mmcblk0p1 /mnt/sdcard $ sudo cp uImage /mnt/sdcard $ sudo umount /mnt/sdcard Copy the rootfs : $ sudo dd if=rootfs.ext3 of=/dev/mmcblk0p2 bs=1M $ sync It's Done! Finish ====== Eject your µSD card, insert it in your Lego EV3, and power it up. To have a serial console, you will need a proper USB to Lego serial port adapter plugged into the EV3 sensors port 1. See: - http://botbench.com/blog/2013/08/15/ev3-creating-console-cable/ - http://botbench.com/blog/2013/08/05/mindsensors-ev3-usb-console-adapter/ The serial port config to use is 115200/8-N-1.