Fix Raspberry Pi 2 boot issue after rpi-update

Written by - 0 comments

Published on - Listed in Linux


In our office, a little Raspberry Pi is responsible for displaying current graphs and monitoring data via its HDMI output to a TV screen. It's been running for months without interruption and I thought I'd run an update on it.

As Raspberry is running on Raspbian, which is based on Debian, there's of course the well known apt-get update/apt-get upgrade commands. I then followed these commands with "rpi-update" -> big mistake.

After rpi-update finished, it's output advised me to reboot the system. Which I did. And the Pi didn't boot anymore. Instead just the red power led was on but nothing else worked. Turns out, rpi-update is bad and shouldn't be launched. Great. Now that I learn that afterwards it's too late.

But not all hope is lost. I removed the microSD card and inserted it into my notebook which I had booted with grml64. The microSD card was detected as /dev/mmcblk0 as seen in dmesg:

[   49.005314] mmc0: new high speed SDHC card at address 59b4
[   49.023019] mmcblk0: mmc0:59b4 00000 7.35 GiB
[   49.025442]  mmcblk0: p1 p2 < p5 p6 > p3

With fdisk some more details can be seen:

fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7892631552 bytes, 15415296 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (locical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1660e00a

Device          Boot   Start          End       Sectors       Size    Id    Type
/dev/mmcblk0p1         8192       1673828       1665637     813.3M     c    W95 FAT32 (LBA)
/dev/mmcblk0p2      1679360      15333375      13654016       6.5G     5    Extended
/dev/mmcblk0p3     15333376      15398911         65536        32M    83    Linux
/dev/mmcblk0p5      1687552       1810431        122880        60M     c    W95 FAT32 (LBA)
/dev/mmcblk0p6      1818624      15333375      13514752       6.5G    83    Linux

The current /boot of the Raspberry Pi can be found in partition 5. I mounted the partition and took a look at the files:

mount /dev/mmcblk0p5 /mnt

ls -la /mnt
drwxr-xr-x  3 root root    16384 Jan  1   1970 .
drwxr-xr-x 29 root root      200 Dec  1   2015 .
-rwxr-xr-x  1 root root       41 Dec  1  09:03 .firmware_revision
-rwxr-xr-x  1 root root    18693 Apr 27   2015 COPYING.linux
-rwxr-xr-x  1 root root     1447 Apr 27   2015 LICENCE.broadcom
-rwxr-xr-x  1 root root    18974 Sep 25   2013 LICENCE.oracle
-rwxr-xr-x  1 root root    10125 Dec  1  09:02 bcm2708-rpi-b-plus.dtb
-rwxr-xr-x  1 root root     9846 Dec  1  09:02 bcm2708-rpi-b.dtb
-rwxr-xr-x  1 root root     9850 Dec  1  09:02 bcm2708-rpi-cm.dtb
-rwxr-xr-x  1 root root    11113 Dec  1  09:02 bcm2708-rpi-2-bcm.dtb
-rwxr-xr-x  1 root root    17900 Dec  1  09:02 bootcode.bin
-rwxr-xr-x  1 root root      120 Jan  1   1980 cmdline.txt
-rwxr-xr-x  1 root root     1757 Jan  1   1980 config.txt
-rwxr-xr-x  1 root root     6449 Dec  1  09:02 fixup.dat
-rwxr-xr-x  1 root root     2473 Dec  1  09:02 fixup_cd.dat
-rwxr-xr-x  1 root root     9687 Dec  1  09:02 fixup_db.dat
-rwxr-xr-x  1 root root     9691 Dec  1  09:02 fixup_x.dat
-rwxr-xr-x  1 root root      137 May  6   2015 issue.txt
-rwxr-xr-x  1 root root  4059512 Dec  1  09:02 kernel.img
-rwxr-xr-x  1 root root  4035396 Dec  1  09:02 kernel7.img
-rwxr-xr-x  1 root root      310 Jan  1   1980 os_config.json
drwxr-xr-x  1 root root     6144 Dec  1  09:02 overlays
-rwxr-xr-x  1 root root  2731192 Dec  1  09:02 start.elf
-rwxr-xr-x  1 root root   604792 Dec  1  09:02 start_cd.elf
-rwxr-xr-x  1 root root  4866440 Dec  1  09:02 start_db.elf
-rwxr-xr-x  1 root root  3820296 Dec  1  09:02 start_x.elf

And here you can see my screwup: The modified files with the timestamp from Dec 1 09:02.
Luckily there's a boot.bak created by rpi-update in partition 6. The boot.bak folder contains the old boot files.

mkdir /mnt2
mount /dev/mmcblk0p6 /mnt2

ls -la /mnt2/boot.bak/
drwxr-xr-x  3 root root    16384 Jan  1   1970 .
drwxr-xr-x 29 root root      200 Dec  1   2015 .
-rwxr-xr-x  1 root root    18693 Apr 27   2015 COPYING.linux
-rwxr-xr-x  1 root root     1447 Apr 27   2015 LICENCE.broadcom
-rwxr-xr-x  1 root root    18974 Sep 25   2013 LICENCE.oracle
-rwxr-xr-x  1 root root     4702 Apr 27   2015 bcm2708-rpi-b-plus.dtb
-rwxr-xr-x  1 root root     4423 Apr 27   2015 bcm2708-rpi-b.dtb
-rwxr-xr-x  1 root root     5690 Apr 27   2015 bcm2708-rpi-2-bcm.dtb
-rwxr-xr-x  1 root root    17900 Apr 27   2015 bootcode.bin
-rwxr-xr-x  1 root root      120 Jan  1   1980 cmdline.txt
-rwxr-xr-x  1 root root     1757 Jan  1   1980 config.txt
-rwxr-xr-x  1 root root     6161 Apr 27   2015 fixup.dat
-rwxr-xr-x  1 root root     2366 Apr 27   2015 fixup_cd.dat
-rwxr-xr-x  1 root root     9216 Apr 27   2015 fixup_db.dat
-rwxr-xr-x  1 root root     9214 Apr 27   2015 fixup_x.dat
-rwxr-xr-x  1 root root      137 May  6   2015 issue.txt
-rwxr-xr-x  1 root root  3974884 Apr 27   2015 kernel.img
-rwxr-xr-x  1 root root  3930004 Apr 27   2015 kernel7.img
-rwxr-xr-x  1 root root      310 Jan  1   1980 os_config.json
drwxr-xr-x  1 root root     4096 Jan  1   1980 overlays
-rwxr-xr-x  1 root root 22664088 Apr 27   2015 start.elf
-rwxr-xr-x  1 root root   567672 Apr 27   2015 start_cd.elf
-rwxr-xr-x  1 root root  4644712 Apr 27   2015 start_db.elf
-rwxr-xr-x  1 root root  3621768 Apr 27   2015 start_x.elf

So the content from boot.bak can be copied to the current /boot partition:

rm -rf /mnt/*
cp -Rp /mnt2/boot.bak/* /mnt/

After that, the Raspberry Pi was able to boot again.


Add a comment

Show form to leave a comment

Comments (newest first)

No comments yet.

RSS feed

Blog Tags:

  AWS   Android   Ansible   Apache   Apple   Atlassian   BSD   Backup   Bash   Bluecoat   CMS   Chef   Cloud   Coding   Consul   Containers   CouchDB   DB   DNS   Database   Databases   Docker   ELK   Elasticsearch   Filebeat   FreeBSD   Galera   Git   GlusterFS   Grafana   Graphics   HAProxy   HTML   Hacks   Hardware   Icinga   Influx   Internet   Java   KVM   Kibana   Kodi   Kubernetes   LVM   LXC   Linux   Logstash   Mac   Macintosh   Mail   MariaDB   Minio   MongoDB   Monitoring   Multimedia   MySQL   NFS   Nagios   Network   Nginx   OSSEC   OTRS   Office   OpenSearch   PGSQL   PHP   Perl   Personal   PostgreSQL   Postgres   PowerDNS   Proxmox   Proxy   Python   Rancher   Rant   Redis   Roundcube   SSL   Samba   Seafile   Security   Shell   SmartOS   Solaris   Surveillance   Systemd   TLS   Tomcat   Ubuntu   Unix   VMWare   VMware   Varnish   Virtualization   Windows   Wireless   Wordpress   Wyse   ZFS   Zoneminder