Major credit to @bodhi on Jeff Doozan's Forum (and Jeff himself) for the uBoot, Debian rootfs, instructions and support. Note that I re-hosted some of @bodhi's files for an easier install.
This tutorial assumes you're starting with a brand new, never modified Pogoplug Mobile or Series 4. However, if you have a previously modified Pogoplug V4, the uBoot instructions will work under Debian/ALARM if you want to upgrade your uBoot for SD Card booting and want to boot the default Pogoplug OS.
At the end of this tutorial your Pogoplug will be booting Debian (or ALARM) from a SD Card. Instructions for booting off a USB Hard/Flash Drive is also included.
My recommendation is to boot via SD Card to keep the USB port free for a USB Hard Drive, USB DAC (for MPD, Airplay and/or SqueezeLite), WebCam, Wi-Fi Adapter or printer.
WARNING: You can potentially brick your Pogoplug following this tutorial. Your warranty will be voided. Proceed at your own risk. I didn't think I needed to say this but I do - these instructions are for the Pogoplug V4. Flashing the uBoot below on any other model of the Pogoplug will result in a brick.
If you made a mistake, bricked your Pogoplug or simply didn't understand what you got yourself into or want to start fresh, you're in luck! Here is a ~$13 solution.
If you made a mistake, bricked your Pogoplug or simply didn't understand what you got yourself into or want to start fresh, you're in luck! Here is a ~$13 solution.
Requirements:
- Pogoplug Series 4 (POGO-V4-A3-01) or Pogoplug Mobile (POGO-V4-A1-01/POGO-V4-A1-05)
- Less than $15.00 shipped for the Mobile on Ebay or Amazon
- Difference Between Pogoplug Mobile and Series 4 (tl;dr - get the Series 4 is you want additional USB Ports and USM SATA Slot)
- USB Flash Drive, USB Hard Drive or SD Card (2GB+)
- Recommendations/Tested:
- SanDisk Ultra Class 10 SDHC Memory Card
- SanDisk Ultra Fit USB 3.0 Low-Profile Flash Drive
- SanDisk Cruzer Fit 8GB Flash Drive
- Seagate Backup Plus 2TB Portable External Hard Drive USB 3.0
- Seagate Backup Plus 1 TB USB 3.0 Portable Hard Drive (USM Slot)
- WD My Passport Ultra 2TB Portable External Hard Drive USB 3.0
Outline of Steps:
- Enable SSH access to Pogoplug
- uBoot Installation via SSH Console
- Kill Pogoplug Service and Download uBoot Flashing Utilities
- Download and Flash New uBoot
- Download and Flash Default uBoot Environment Parameters
- Update uBoot Environment Parameters
- Setup Netconsole (optional but highly recommended)
- Boot default Pogoplug OS when USB/SD Card not attached
- Debian/ALARM Installation on SD Card (or USB Hard/Flash Drive)
There are two methods to enable SSH on your Pogoplug.
1) Official Method - Activate on my.pogoplug.com and then enable SSH
- Power on the Pogoplug and connect it to you network.
- Log into http://my.pogoplug.com and activate your Pogoplug @ https://pogoplug.com/activate/
- Enable SSH access by going to my.pogoplug.com and then go to General Settings-> Security.
- Note that if you don't see the "Enable SSH Access" option, try power cycling the Pogoplug.
2) Backdoor Method (credit to GTVHacker.com)
Make sure your Pogoplug is connected to your network and has internet access.
Check your router or use a network scanning tool (iNet Network Scanner on iPhone) to determine the IP Address of the Pogoplug.
From a Linux computer (e.g. another Pogoplug running Debian/Alarm) run the below curl command.
curl -k "https://root:ceadmin@[PogoplugIPAddress]/sqdiag/HBPlug?action=command&command=dropbear%20start";
If the above curl command doesn't work, your Pogoplug may need to be updated. Leave it plugged in for a hour or two and then try the command again.
Note that the backdoor method is not persistent (SSH access not available after a reboot).
SSH/Putty into Pogoplug V4 and Perform Installation
Use Putty or your favorite SSH client to connect to your Pogoplug.
If you used the "Official Method" for activating and enabling SSH on your Pogoplug, then the username will be "root" and the password will be whatever you set (note that it's not the same password used to log into my.pogoplug.com).
For the "Backdoor Method", the username and password is root/ceadmin.
From here, everything is done via the SSH console. Here is a complete console installation log. Open it up and compare with what you're seeing on your ssh console screen as you're going through the tutorial.
Kill Pogoplug Service and Download uBoot Flashing Utilities
#stop my.pogoplug.com service
killall hbwd
#download firmware utilities
cd /tmp
wget http://download.qnology.com/pogoplug/v4/nanddump
wget http://download.qnology.com/pogoplug/v4/nandwrite
wget http://download.qnology.com/pogoplug/v4/flash_erase
wget http://download.qnology.com/pogoplug/v4/fw_printenv
wget http://download.qnology.com/pogoplug/v4/fw_setenv
#make execuable
chmod +x flash_erase fw_printenv fw_setenv nanddump nandwrite
#remount '/' as read/write
#by default the Pogoplug OS (internal flash) is read only
#skip if running from Debian/ALARM
mount -o remount,rw /
#setup fw_env.config
echo "/dev/mtd0 0xc0000 0x20000 0x20000">/etc/fw_env.config
Download and Flash new uBoot
#download uboot and md5
wget http://download.qnology.com/pogoplug/v4/uboot.2014.07-tld-1.pogo_v4.bodhi.tar
wget http://download.qnology.com/pogoplug/v4/uboot.2014.07-tld-1.pogo_v4.bodhi.tar.md5
#check md5sum
md5sum -c uboot.2014.07-tld-1.pogo_v4.bodhi.tar.md5
#extract uboot
tar -xf uboot.2014.07-tld-1.pogo_v4.bodhi.tar
#Erase and flash uboot on mtd0
#BE EXTRA CAREFUL WITH THE NEXT TWO COMMANDS. NO TYPOS! CUT AND PASTE.
/tmp/flash_erase /dev/mtd0 0 4
/tmp/nandwrite /dev/mtd0 /tmp/uboot.2014.07-tld-1.pogo_v4.mtd0.kwb
Download and Flash uBoot Environment Parameters
#download default uboot env settings and md5
wget http://download.qnology.com/pogoplug/v4/uboot.2014.07-tld-1.environment.img.bodhi.tar
wget http://download.qnology.com/pogoplug/v4/uboot.2014.07-tld-1.environment.img.bodhi.tar.md5
#check md5 sum
md5sum -c uboot.2014.07-tld-1.environment.img.bodhi.tar.md5
#extract uboot env settings
tar -xf uboot.2014.07-tld-1.environment.img.bodhi.tar
#Flash default uboot env setting
#BE EXTRA CAREFUL WITH THE NEXT TWO COMMANDS. NO TYPOS! CUT AND PASTE.
/tmp/flash_erase /dev/mtd0 0xc0000 1
/tmp/nandwrite -s 786432 /dev/mtd0 uboot.2014.07-tld-1.environment.img
Update uBoot Environment Parameters
#SET MACADDRESS
/tmp/fw_setenv ethaddr "$(cat /sys/class/net/eth0/address)"
#double check the MAC Address matches with
#what is on the bottom of your Pogoplug
/tmp/fw_printenv ethaddr
#set archNumber and machid (for LED)
/tmp/fw_setenv arcNumber 3960
/tmp/fw_setenv machid F78
#set rootfs file system type
/tmp/fw_setenv usb_rootfstype ext3
#set to original mtd partition layout
/tmp/fw_setenv mtdparts 'mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)'
#print out all uboot environment parameters
#make sure there are no errors
/tmp/fw_printenv
Setup Netconsole (Optional but highly recommended)
More info here - http://forum.doozan.com/read.php?3,14,14
Just run the below commands if you are not sure.
#Update IP Addresses as needed
/tmp/fw_setenv serverip 192.168.1.100
/tmp/fw_setenv ipaddr 192.168.1.10
/tmp/fw_setenv if_netconsole 'ping $serverip'
/tmp/fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
/tmp/fw_setenv preboot 'run if_netconsole start_netconsole'
Boot default Pogoplug OS when USB/SD Card not attached
Note that this section only works on a new unmodified Pogoplug. It assumes the command are all executed from within the default Pogoplug OS and not from Arch Linux or Debian.
If you previously installed the uBoot from archlinuxarm.org and/or already running ALARM or Debian, use these instructions instead - Pogoplug v4 - Add option to boot default Pogoplug OS when USB/SD Card is Not Attached.
To boot the default Pogoplug OS, we will need to chain load the original (dockstar) uboot which we'll download and store on the internal flash. The boot order will be USB, MMC/SD, SATA (Series 4 only) and then last, the original uBoot which will then load the default Pogoplug OS.
Don't forget that you'll need to activate the Pogoplug on my.pogoplug.com if you plan on SSHing into the default Pogoplug OS.
#remount '/' as read/write
mount -o remount,rw /
#update boot order to include pogoplug OS
/tmp/fw_setenv bootcmd 'run bootcmd_usb; run bootcmd_mmc; run bootcmd_sata; run bootcmd_pogo; reset'
#chain load original uboot
/tmp/fw_setenv bootcmd_pogo 'if ubi part root 2048 && ubifsmount ubi:rootfs && ubifsload 0x800000 uboot.mtd0.dockstar.original.kwb ; then go 0x800200; fi'
Debian/ALARM Installation on SD Card (or USB Hard/Flash Drive)
#Update IP Addresses as needed
/tmp/fw_setenv serverip 192.168.1.100
/tmp/fw_setenv ipaddr 192.168.1.10
/tmp/fw_setenv if_netconsole 'ping $serverip'
/tmp/fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
/tmp/fw_setenv preboot 'run if_netconsole start_netconsole'
Boot default Pogoplug OS when USB/SD Card not attached
Note that this section only works on a new unmodified Pogoplug. It assumes the command are all executed from within the default Pogoplug OS and not from Arch Linux or Debian.
If you previously installed the uBoot from archlinuxarm.org and/or already running ALARM or Debian, use these instructions instead - Pogoplug v4 - Add option to boot default Pogoplug OS when USB/SD Card is Not Attached.
To boot the default Pogoplug OS, we will need to chain load the original (dockstar) uboot which we'll download and store on the internal flash. The boot order will be USB, MMC/SD, SATA (Series 4 only) and then last, the original uBoot which will then load the default Pogoplug OS.
Don't forget that you'll need to activate the Pogoplug on my.pogoplug.com if you plan on SSHing into the default Pogoplug OS.
#remount '/' as read/write
mount -o remount,rw /
#download original uboot
cd /
wget http://download.doozan.com/uboot/files/uboot/uboot.mtd0.dockstar.original.kwb#update boot order to include pogoplug OS
/tmp/fw_setenv bootcmd 'run bootcmd_usb; run bootcmd_mmc; run bootcmd_sata; run bootcmd_pogo; reset'
#chain load original uboot
/tmp/fw_setenv bootcmd_pogo 'if ubi part root 2048 && ubifsmount ubi:rootfs && ubifsload 0x800000 uboot.mtd0.dockstar.original.kwb ; then go 0x800200; fi'
Debian/ALARM Installation on SD Card (or USB Hard/Flash Drive)
Insert SD Card or USB Hard/Flash Drive. The commands below are for Debian on a SD Card. However, I've noted the difference for USB Hard/Flash Drive and Arch Linux.
#stop my.pogoplug.com service (just in case)
killall hbwd
#make device node for mmc/sd card
killall hbwd
#make device node for mmc/sd card
#skip command for usb install
mknod /tmp/mmcblk0 b 179 0
mknod /tmp/mmcblk0 b 179 0
#Partition your SD Card
/sbin/fdisk /tmp/mmcblk0
#OR Partition your USB Flash/Hard Drive
#/sbin/fdisk /dev/sda
# Type in the following commands to erase
# and re-partition SD Card/USB Flash/Hard Drive
#(WARNING - FLASH/HARD DRIVE WILL BE COMPLETELY WIPED):
#
# p # list current partitions
# o # to delete all partitions
# n # new partition
# p # primary partition
# 1 (one) # first partition
# <enter> # default start block
# <enter> # default end block (to use the whole drive)
# If you're using a hard drive, create a small
# 4GB partition instead of using the whole drive,
# leaving the rest for a data partition
# +4G # create a 4GB partition
# w # write new partition to disk
#command not needed for USB install/sbin/fdisk /tmp/mmcblk0
#OR Partition your USB Flash/Hard Drive
#/sbin/fdisk /dev/sda
# Type in the following commands to erase
# and re-partition SD Card/USB Flash/Hard Drive
#(WARNING - FLASH/HARD DRIVE WILL BE COMPLETELY WIPED):
#
# p # list current partitions
# o # to delete all partitions
# n # new partition
# p # primary partition
# 1 (one) # first partition
# <enter> # default start block
# <enter> # default end block (to use the whole drive)
# If you're using a hard drive, create a small
# 4GB partition instead of using the whole drive,
# leaving the rest for a data partition
# +4G # create a 4GB partition
# w # write new partition to disk
#make device node for partition
mknod /tmp/mmcblk0p1 b 179 1
#download format utility
cd /tmp
wget http://archlinuxarm.org/os/pogoplug/mke2fs
chmod +x mke2fs
wget http://archlinuxarm.org/os/pogoplug/mke2fs
chmod +x mke2fs
#format newly created partition
#ext3 with "rootfs" as label
#ext3 with "rootfs" as label
/tmp/mke2fs -L rootfs -j /tmp/mmcblk0p1
#OR format USB Flash/Hard Drive
#/tmp/mke2fs -L rootfs -j /dev/sda1
#create mount point
mkdir /tmp/mnt
#mount SD Card
mount /tmp/mmcblk0p1 /tmp/mnt
#OR mount USB Flash/Hard Drive
#mount /dev/sda1 /tmp/mnt
#download Debian rootfs and md5
cd /tmp/mnt
wget http://download.qnology.com/pogoplug/v4/Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2.md5
#check md5
md5sum -c Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2.md5
#extract and delete
tar -xjf Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2
rm Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2
rm Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2.md5
#OR For Arch Linux ARM
#cd /tmp/mnt
#check md5
md5sum -c Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2.md5
#extract and delete
tar -xjf Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2
rm Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2
rm Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2.md5
#OR For Arch Linux ARM
#cd /tmp/mnt
#wget http://archlinuxarm.org/os/ArchLinuxARM-kirkwood-latest.tar.gz
#tar -xzvf ArchLinuxARM-kirkwood-latest.tar.gz
#rm ArchLinuxARM-kirkwood-latest.tar.gz
#rm ArchLinuxARM-kirkwood-latest.tar.gz
#Make SD Card first boot device (optional)
#Default boot order is USB->MMC/SD->SATA->POGO_OS
/tmp/fw_setenv bootcmd 'run bootcmd_mmc; run bootcmd_usb; run bootcmd_sata; run bootcmd_pogo; reset'
#Sync and reboot, cross your fingers
sync
cd ..
umount /tmp/mnt
/sbin/reboot
At this point, your Pogoplug should boot back up into Debian or Arch Linux ARM. Note that the IP Address of your Pogoplug may have changed. Double check your router for the IP Address assigned to your Pogoplug or use a network scanning tool (iNet Network Scanner on iPhone) to determine the IP Address of the Pogoplug.
For Debian the default username and password is root/root. For Arch Linux ARM (ALARM) the username and password is alarm/alarm.
For Debian the default username and password is root/root. For Arch Linux ARM (ALARM) the username and password is alarm/alarm.
#Change password
passwd
#Generate New OpenSSH Keys
rm /etc/ssh/ssh_host*
ssh-keygen -A
#Initial update
apt-get update
apt-get upgrade
#Set hostname to DebianPlug or whatever you like
echo DebianPlug>/etc/hostname
#Set Time Zone
tzselect
Upgrade Debian to 3.18.5 kernel (optional)
Latest kernel and instructions here - http://forum.doozan.com/read.php?2,12096
Install SAMBA for a simple NAS (Network Attached Storage) - Debian
Plug in your USB Hard Drive and partition and format the drive as ext3.
mkdir -p /media/usb/share
mount /dev/sda1 /media/usb/share
apt-get update
apt-get upgrade
#Set hostname to DebianPlug or whatever you like
echo DebianPlug>/etc/hostname
#Set Time Zone
tzselect
Upgrade Debian to 3.18.5 kernel (optional)
Latest kernel and instructions here - http://forum.doozan.com/read.php?2,12096
#backup original kernel files
cd /boot
mkdir backup
mv *3.14* backup
mv uImage backup/uImage3.14
mv uInitrd backup/uInitrd3.14
#download from bodhi's dropbox
wget --no-check-certificate https://www.dropbox.com/s/n7utrgwky1b2rg9/linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2
#check md5
echo "68c96df62427c69bc7599ff31859b9b4 linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2" |md5sum -c
#extract
tar -xvjf linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2
tar -xvf linux-dtb-3.18.5-kirkwood-tld-1.tar
#install kernel and headers
dpkg -i linux-image-3.18.5-kirkwood-tld-1_1_armel.deb
dpkg -i linux-headers-3.18.5-kirkwood-tld-1_1_armel.deb
#generate new uImage and uInitrd with fdt file. No need to modify uboot env
cp -a zImage-3.18.5-kirkwood-tld-1 zImage.fdt
cat dts/kirkwood-pogoplug_v4.dtb >> zImage.fdt
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-3.18.5-kirkwood-tld-1 -d zImage.fdt uImage
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-3.18.5-kirkwood-tld-1 -d initrd.img-3.18.5-kirkwood-tld-1 uInitrd
rm zImage.fdt
cd /boot
mkdir backup
mv *3.14* backup
mv uImage backup/uImage3.14
mv uInitrd backup/uInitrd3.14
#download from bodhi's dropbox
wget --no-check-certificate https://www.dropbox.com/s/n7utrgwky1b2rg9/linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2
#check md5
echo "68c96df62427c69bc7599ff31859b9b4 linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2" |md5sum -c
#extract
tar -xvjf linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2
tar -xvf linux-dtb-3.18.5-kirkwood-tld-1.tar
#install kernel and headers
dpkg -i linux-image-3.18.5-kirkwood-tld-1_1_armel.deb
dpkg -i linux-headers-3.18.5-kirkwood-tld-1_1_armel.deb
#generate new uImage and uInitrd with fdt file. No need to modify uboot env
cp -a zImage-3.18.5-kirkwood-tld-1 zImage.fdt
cat dts/kirkwood-pogoplug_v4.dtb >> zImage.fdt
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-3.18.5-kirkwood-tld-1 -d zImage.fdt uImage
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-3.18.5-kirkwood-tld-1 -d initrd.img-3.18.5-kirkwood-tld-1 uInitrd
rm zImage.fdt
#clean up
rm linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2
rm linux-dtb-3.18.5-kirkwood-tld-1.tar
rm linux-dtb-3.18.5-kirkwood-tld-1.tar
#reboot and verify
uname -a
Plug in your USB Hard Drive and partition and format the drive as ext3.
mkdir -p /media/usb/share
mount /dev/sda1 /media/usb/share
apt-get install samba
cd /etc/samba
mv smb.conf smb.conf.bak
#download example smb.conf for public share
#no authentication require, everyone has
#read/write access to / (root$) and usb (/media/usb/share)
wget --no-check-certificate https://dl.dropboxusercontent.com/u/42238/pogoplug/debian/smb.conf
/etc/init.d/samba restart
#For automount after reboot use /etc/fstab
cd /etc/samba
mv smb.conf smb.conf.bak
#download example smb.conf for public share
#no authentication require, everyone has
#read/write access to / (root$) and usb (/media/usb/share)
wget --no-check-certificate https://dl.dropboxusercontent.com/u/42238/pogoplug/debian/smb.conf
/etc/init.d/samba restart
#For automount after reboot use /etc/fstab
echo "/dev/sda1 /media/usb ext3 rw,noatime,nofail 0 0" >> /etc/fstab
Debian Pogoplug Tutorials:
- Debian on Pogoplug Tutorial - Wireless Configuration
- Debian on Pogoplug Tutorial - MJPG-Streamer (WebCam) Installation
- Debian on Pogoplug Tutorial - Webmin Installation
- More to come
Troubleshooting
On the Series 4, only the top USB port is bootable. The blue USB 3.0 ports on the back of the Series 4 are not bootable.
Not all SD cards and USB flash drive are equal. If you're having issues booting into ALARM or Debian, try using a different SD card or USB flash drive.
Double check that you're SD Card is not in the "locked" (read only) position.
Cannot SSH back into the Pogoplug - double check the IP Address assigned to your Pogoplug. After booting Debian/ALARM, chances are your router will assign the Pogoplug a different IP Address. Check your router or use a network scanning tool to help figure out what IP Address was assigned to your Pogoplug.
Use Netconsole to see what's going on. Hopefully you followed my recommendation and setup netconsole.
Reinstallation - If you need to setup a new SD Card or USB Flash Drive, what you need to do is use a Linux computer or boot a Live Linux CD to partition, format (please make sure to use ext3 and not ext4), download and extract the rootfs to your SD Card or USB Flash Drive. Here is a basic outline of the steps from the ArchLinuxArm.org website. Note for Debian, you'll want to use the link to the tarball in this tutorial.
Note that it's fairly difficult or nearly impossible to truly brick the Pogoplug v4 because it supports UART booting using a serial connection. More info here - http://forum.doozan.com/read.php?3,7852,7852. Use bodhi's kwboot found here.
Miscellaneous Links and Reference
- Performance Tuning with Pogoplug v4 on Arch Linux ARM
- PogoPlug Series 4 (ArchLinux) review
- Pogoplug V4 Disassembly and Attaching Serial Cable
- Go here for the latest Debian kernel or rootfs.
- For Arch Linux ARM, please check out my previous tutorial: [Tutorial] - Pogoplug E02/V4 with Arch Linux ARM - NAS (SAMBA), AirPlay, AirPrint, Google CloudPrint, SqueezeBox (Logitech Media Server), SqueezeLite, Plex Media Server
Self Promotion
Three Pogoplugs gave their lives bringing you this tutorial and countless hours. If you would like to show your support for this blog, please check out my AirEnabler or buy me a cup of coffee (link above). Thank you for your support.