Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save cuihantao/2f2efdd1c9ab823d2182b5e9bdc8cbfc to your computer and use it in GitHub Desktop.
Save cuihantao/2f2efdd1c9ab823d2182b5e9bdc8cbfc to your computer and use it in GitHub Desktop.
Installing the Machinekit Altera CycloneV test image

Contents

This SD image is a debian jessie console image with:

  • a 4.1.22-ltsi-rt kernel with RT-PREEMPT patches applied
  • tested on Terasic DE0-Nano-SoC Kit, other SoCKit platforms should work with appropriate dtb
  • machinekit RIP-build under /home/machinekit/machinekit, all build artefacts are in place (no need to run make)
  • machinekit packages are NOT installed and you do not have to!
  • all machinekit build- and runtime required packages ARE installed.
  • /home/machinekit/.bashrc already set up to run machinekit from the RIP build directory.
  • one known-to-work configuration with hostmot2/onboard FPGA support is: machinekit/configs/hm2-soc-stepper/5i25-socfpga.ini
  • this assumes Charles'd DB25 adapter board and Mesanet 7i76 or 7i85S cards connected
  • both the DE0_Nano_SoC_DB25.7I76_7I76_7I76_7I76 and DE0_Nano_SoC_DB25.7I76_7I85S_GPIO_GPIO firmwares are verified to work
  • there is a HAL test configuration in machinekit/configs/hm2-soc-stepper/irqtest.hal
  • apt sources ready for ROS integration via debian-robotics

Purpose

  • this is intended for advanced users and developers - which is why it contains a RIP install and no packages.
  • the purpose is to shake out configurations and remove any remaining bugs.
  • this is not for beginners and folks looking for a turn-key image for say 3D printers.

Upgrading from a previously downloaded image

Instead of starting over with a new image, you can upgrade to the current status by:

apt update
apt install device-tree-compiler
apt upgrade

Then proceed to machinekit/src , git pull and rebuild the supplied RIP build.

Installation

Install bmaptools

apt install bmap-tools
  # make sure the card is not accidentially mounted - Ubuntu likes to do that
  # so: 
  umount /dev/sdb # just to be sure
  bmaptool copy <name.img.xz>  /dev/<sd card device, usually sdb>
````
- verify [the switches on the board are set: 1,3,5,6 towards 'ON'](https://cloud.githubusercontent.com/assets/901479/14768899/faf9025c-0a4c-11e6-9a2d-bc8a2dfa4bd1.png)
- insert SD card, connect serial console at 115200, apply power
- when u-boot starts, hit enter immediately to interrupt automatic boot - display:

````
Restarting system.
 
U-Boot SPL 2016.05-rc3-01014-g57258ab (Apr 27 2016 - 13:20:08)
drivers/ddr/altera/sequencer.c: Preparing to start memory calibration
drivers/ddr/altera/sequencer.c: CALIBRATION PASSED
drivers/ddr/altera/sequencer.c: Calibration complete
Trying to boot from MMC1
 
 
U-Boot 2016.05-rc3-01014-g57258ab (Apr 27 2016 - 13:20:08 +0200), Build: jenkins-u-boot-socfpga-23
 
CPU:   Altera SoCFPGA Platform
FPGA:  Altera Cyclone V, SE/A4 or SX/C4, version 0x0
BOOT:  SD/MMC Internal Transceiver (3.0V)
       Watchdog enabled
I2C:   ready
DRAM:  1 GiB
MMC:   dwmmc0@ff704000: 0
*** Warning - bad CRC, using default environment
 
In:    serial
Out:   serial
Err:   serial
Model: Terasic DE0-Nano(Atlas)
Net:   
Error: ethernet@ff702000 address not set.
No ethernet found.
Hit any key to stop autoboot:  0 
=> 
 ````
 
**If you do no get this far, try an SD card from another manufacturer** - I found the de0 nano to be a lot more fussy than the Beaglebone wrt SD card manufacturer:

- known-to-work: [Samsung HC](https://snag.gy/IfsvhG.jpg), [Kingston SDC4 HC](https://snag.gy/vh46It.jpg)
- problematic:  [Sandisk Ultra HC1](https://snag.gy/fCJaeO.jpg), [Transcend Ultimate 633x](https://snag.gy/C3gOo6.jpg)

Try ejecting the SD card, wiggle the card a bit before gently pushing in again; I found the SD card connector is a tad flakey and probably easy to break
 
**IMPORTANT:** reset to default environment - set the ethernet MAC address (the de0 has no fixed MAC address out of the box - make one up); then save the environment and reset - the commands are:

env default -a setenv ethaddr ba:d0:4a:9c:4e:ce saveenv reset

**do this line by line, not copy & paste in one go (may overrun u-boot):**
````
=> env default -a
## Resetting to default environment
=> setenv ethaddr ba:d0:4a:9c:4e:ce
=> saveenv
Saving Environment to MMC...
Writing to MMC(0)... done
=> reset
````
- this information is saved on the SD card, not some config EEPROM or NVRAM. You will have to redo this step for every SD card.
- The board should come up like so (note change of `Net:   eth0: ethernet@ff702000` line):

resetting ...

U-Boot SPL 2016.05-rc3-01014-g57258ab (Apr 27 2016 - 13:20:08) drivers/ddr/altera/sequencer.c: Preparing to start memory calibration drivers/ddr/altera/sequencer.c: CALIBRATION PASSED drivers/ddr/altera/sequencer.c: Calibration complete Trying to boot from MMC1

U-Boot 2016.05-rc3-01014-g57258ab (Apr 27 2016 - 13:20:08 +0200), Build: jenkins-u-boot-socfpga-23

CPU: Altera SoCFPGA Platform FPGA: Altera Cyclone V, SE/A4 or SX/C4, version 0x0 BOOT: SD/MMC Internal Transceiver (3.0V) Watchdog enabled I2C: ready DRAM: 1 GiB MMC: dwmmc0@ff704000: 0 In: serial Out: serial Err: serial Model: Terasic DE0-Nano(Atlas) Net: eth0: ethernet@ff702000 Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device Checking for: /boot/uEnv.txt ... trying interface=mmc bootpart0:2 ... 410 bytes read in 20 ms (19.5 KiB/s) Loaded environment from /boot/uEnv.txt Using: dtb=socfpga_cyclone5_de0_sockit.dtb ... fpgaimage: file /lib/firmware/socfpga/soc_system.rbf not found - skipping FPGA load... Checking if uname_r is set in /boot/uEnv.txt... Running uname_boot ... loading /boot/vmlinuz-4.1.22-ltsi-rt23-ge1e5eb8 ... 4164872 bytes read in 237 ms (16.8 MiB/s) loading /boot/dtbs//socfpga_cyclone5_de0_sockit.dtb ... 29520 bytes read in 25 ms (1.1 MiB/s) debug: [console=ttyS0,115200 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait quiet] (no initrd)... debug: [bootz 0x01000000 - 100] ... Kernel image @ 0x1000000 [ 0x000000 - 0x3f8d08 ]

Flattened Device Tree blob at 00000100

Booting using the fdt blob at 0x000100 reserving fdt memory region: addr=0 size=1000 Loading Device Tree to 03ff5000, end 03fff34f ... OK

Starting kernel ...

[ 0.000000] L2C: platform provided aux values permit register corruption.

Debian GNU/Linux 8 mksocfpga ttyS0

Machinekit Debian Image 2016-08-06

Support/FAQ: http://www.machinekit.io/

default username:password is [machinekit:machinekit]

mksocfpga login:

- login from a box with an X display:
````
slogin -x machinekit@mksocfpga.local
  • pull any updates (in particular, the socfpga-rbf FPGA firmware package is changing fast!)
sudo apt update
sudo apt -y upgrade
````
- resize the image to the actual SD size
````
sudo /opt/scripts/tools/grow_partition.sh
````


- now you're good to try the demo configs

# Rebuilding on target:

for now, you will have to create a swapfile manually like so:

sudo bash dd if=/dev/zero of=/swapfile bs=1M count=512 chmod 600 /swapfile mkswap /swapfile swapon /swapfile

to make the swap space permanent, add this line to /etc/fstab:

/swapfile none swap defaults 0 0


Rebuild example:

machinekit@mksocfpga:$ cd machinekit/src machinekit@mksocfpga:/machinekit/src$ touch hal/drivers/mesa-hostmot2/hm2_soc_ol.* machinekit@mksocfpga:~/machinekit/src$ make Reading 2/2 PRU dependency files Reading 328/330 dependency files Done reading dependencies

Reading 0/0 realtime dependency files Done reading realtime dependencies make: Entering directory '/home/machinekit/machinekit/src' Making modules for flavor posix make[1]: Entering directory '/home/machinekit/machinekit/src' Reading 2/2 PRU dependency files Reading 336/338 dependency files Done reading dependencies

Reading 289/289 realtime dependency files Done reading realtime dependencies Depending hal/drivers/mesa-hostmot2/hm2_soc.c Reading 2/2 PRU dependency files Reading 336/338 dependency files Done reading dependencies

Reading 289/289 realtime dependency files Done reading realtime dependencies Compiling realtime hal/drivers/mesa-hostmot2/hm2_soc.c Linking ../rtlib/posix/hm2_soc.so make[1]: Leaving directory '/home/machinekit/machinekit/src' Making modules for flavor rt-preempt make[1]: Entering directory '/home/machinekit/machinekit/src' Reading 2/2 PRU dependency files Reading 336/338 dependency files Done reading dependencies

Reading 289/289 realtime dependency files Done reading realtime dependencies Depending hal/drivers/mesa-hostmot2/hm2_soc.c Reading 2/2 PRU dependency files Reading 336/338 dependency files Done reading dependencies

Reading 289/289 realtime dependency files Done reading realtime dependencies Compiling realtime hal/drivers/mesa-hostmot2/hm2_soc.c Linking ../rtlib/rt-preempt/hm2_soc.so make[1]: Leaving directory '/home/machinekit/machinekit/src' make: Leaving directory '/home/machinekit/machinekit/src'

machinekit@mksocfpga:/machinekit/src$ sudo make setuid ... machinekit@mksocfpga:/machinekit/src$ machinekit ../configs/hm2-soc-stepper/5i25-socfpga.ini MACHINEKIT - 0.1 Machine configuration directory is '/home/machinekit/machinekit/src/../configs/hm2-soc-stepper' Machine configuration file is '5i25-socfpga.ini' Starting Machinekit... io started ....


# Converting to a package-based install:

````
apt update
apt install machinekit	machinekit-dev	machinekit-rt-preempt
`````
and edit out the reference to /home/machinekit/machinekit/scripts/rip-environment in the .bashrc file.






Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment