Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
docs:guide-user:installation:installation_methods:sd_card [2021/02/15 18:55] – [Prebuilt disk images] phoebedocs:guide-user:installation:installation_methods:sd_card [2024/02/12 12:06] – external edit
Line 3: Line 3:
 Installation can be done via SD card. Installation can be done via SD card.
  
-FIXME //Provide an outline of the procedure here// 
  
 ===== Prebuilt disk images ===== ===== Prebuilt disk images =====
Line 9: Line 8:
  
  
-=== General Procedure: ===+==== General procedure: ===
 +**Linux :**
   - Download the correct image for your device. Probably named similar to ''openwrt-*-sysupgrade.img.gz''.   - Download the correct image for your device. Probably named similar to ''openwrt-*-sysupgrade.img.gz''.
   - Decompress it: <code>gzip -d openwrt-*-sysupgrade.img.gz</code>   - Decompress it: <code>gzip -d openwrt-*-sysupgrade.img.gz</code>
-  - Connect sdcard to your computer and look at ''lsblk'' or ''dmesg'' to identify it. In most cases, it would be something like ''/dev/sdX''. ((You want to specify the device and not the partition, meaning, you have to use ''/dev/sdX'' and not ''/dev/sdX1'')) +  - Connect sd card to your computer and look at ''lsblk'' or ''dmesg'' to identify it. In most cases, it would be something like ''/dev/sdX''. ((You want to specify the device and not the partition, meaning, you have to use ''/dev/sdX'' and not ''/dev/sdX1'')) 
-  - Double check that you have identified your sdcard correctly. If the ''/dev/sdX'' you have chosen, corresponds to your harddrive, the next step would destroy your system +  - Double check that you have identified your sd card correctly. If the ''/dev/sdX'' you have chosen, corresponds to your harddrive, the next step would destroy your system 
-  - copy the image to the sdcard with: <code>dd if=openwrt-*-sysupgrade.img of=/dev/sdX</code>+  - copy the image to the sd card with: <code>dd if=openwrt-*-sysupgrade.img of=/dev/sdX</code> 
 + 
 +**Other OS :** \\  
 + 
 +https://www.balena.io/etcher/ - free open source program to flash SD cards on Windows, Linux, or macOS 
 +  - Download the correct image for your device. Probably named similar to ''openwrt-*-sysupgrade.img.gz''
 +  - Select the image. 
 +  - Select your SD card. 
 +  - Flash the image.
  
 Examples: Examples:
-  * [[toh:pcengines:apu#installation1|APU]] 
   * [[toh:raspberry_pi_foundation:raspberry_pi#how_to_flash_openwrt_to_an_sd_card|RPi]]   * [[toh:raspberry_pi_foundation:raspberry_pi#how_to_flash_openwrt_to_an_sd_card|RPi]]
-  * [[docs:techref:hardware:soc:soc.allwinner.sunxi#trunk_-_pre-built_sd_card_images|Sunxi]]+  * [[:toh:friendlyarm:nanopi_r4s_v1#installation|R4S]]
  
-=== Which image to chose? === +==== Which image to chose? ==== 
-Often, different images are available for a device. The differ in the filesystem used. +Often a device has multiple images available which differ in the [[:docs:guide-user:storage:filesystems-and-partitions|filesystem ]] used.
-== ext4-sdcard.img.gz == +
-  * not optimized for flash memory (journaling speed up flash wear) +
-  * sdcard can be easyly mounted externally for modification +
-  * desktop linux standard +
-  * +
  
-== squashfs-sdcard.img.gz == +=== ext4-sdcard.img.gz === 
-  * newer images include a hidden f2fs filesystem, which is optimized for flash memory+  * not optimized for flash memory (journaling increases flash wear) 
 +  * sd card can be easily mounted externally for modification 
 +  * updates and changes can be made directly to the partition 
 +  * Linux desktop standard 
 + 
 +=== squashfs-sdcard.img.gz ===
   * compressed   * compressed
-  * needs special mount procedureto externally modify it+  * newer images include a hidden f2fs filesystem, which is optimized for flash memory 
 +  * needs special mount procedure to externally modify
   * all changes are done in an overlay partition   * all changes are done in an overlay partition
 +  * due to overlay partition it is simple to reset system to defaults
  
 == other images == == other images ==
   * ubifs-sdcard.img.gz   * ubifs-sdcard.img.gz
-  * ... 
  
-== see also ==+==== Mounting a squashfs filesystem locally ====
  
 +If you insert your newly flashed SD card into a Linux machine, it will be easy to mount the read only squashfs partition but it won't know about the overlay, which is not even in the partition table but instead located immediately after the squashfs filesystem in the same partition. You therefore need to mount the overlay as a loopback device. You can discover the offset by running losetup on the device, or calculate the offset yourself by inspecting the filesystem.
 +
 +<code>
 +# Setup the loop back device.
 +# See libfstools/rootdisk.c for source of partition offset logic.
 +DEVICE= ### Set this appropriately - e.g. /dev/sda
 +PARTITION="$DEVICE"2
 +FS_SIZE="$(sudo unsquashfs -s "$PARTITION" | grep -o 'Filesystem size [0-9]* bytes' | grep -o '[0-9][0-9]*')"
 +FS_OFFSET="$(expr '(' "$FS_SIZE" + 65535 ')' / 65536 '*' 65536)" 
 +LOOP_DEVICE="$(sudo losetup -f --show -o "$FS_OFFSET" "$PARTITION")"
 +
 +# Now mount both partitions (remember, you may need to unmount any automatic mounts)
 +mkdir -p /mnt/base /mnt/overlay /mnt/combined
 +sudo mount "$PARTITION" /mnt/base            
 +sudo mount "$LOOP_DEVICE" /mnt/overlay
 +sudo mount -o noatime,lowerdir=/mnt/base,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work -t overlay overlayfs /mnt/combined
 +</code>
 +
 +This should leave you with a writable filesystem in /mnt/combined which will work as it does on OpenWRT.
 +
 +==== Expanding the filesystem ====
  
-=== expanding the filesystem === 
 To use the whole available space of your sdcard, you probably have to resize your partition.  To use the whole available space of your sdcard, you probably have to resize your partition. 
 +
 +=== squashfs image ===
 +
 +As with mounting the overlay above, to resize it you'll need the offset of the hidden f2fs or ext4 filesystem (depending on the size of your image, one or the other will be used).
 +
 +First, make sure the partition is not mounted, then do something like:
 +
 +<code>
 +DEVICE= ### Set this appropriately - e.g. /dev/sda
 +PARTITION="$DEVICE"2
 +sudo cfdisk "$DEVICE"  # select resize, then write
 +
 +# Create a loop device pointing to the FS
 +# See libfstools/rootdisk.c for source of partition offset logic.
 +FS_SIZE="$(sudo unsquashfs -s "$PARTITION" | grep -o 'Filesystem size [0-9]* bytes' | grep -o '[0-9][0-9]*')"
 +FS_OFFSET="$(expr '(' "$FS_SIZE" + 65535 ')' / 65536 '*' 65536)" 
 +LOOP_DEVICE="$(sudo losetup -f --show -o "$FS_OFFSET" "$PARTITION")"
 +
 +# Now, resize... you may need to fsck first, though.
 +sudo fsck "$LOOP_DEVICE"
 +sudo resize2fs "$LOOP_DEVICE"
 +</code>
 +
 +=== ext4 image ===
 +
 +You can use gparted to resize and extend the partitions.
 +To do it online, follow the procedure in [[http://bugs.openwrt.org/index.php?do=details&task_id=2951|link]] or [[docs:guide-user:installation:openwrt_x86#resizing_filesystem|link]].
 +
 +Example, to resize ''/dev/mmcblk0p2'' mounted on ''/'', install ''parted'', ''tune2fs'' and ''resize2fs'' then:
 +<code>
 +parted
 +p
 +resizepart 2 32GB
 +q
 +</code>
 +Next, you may need to repair your device (perhaps say yes to all interactive queries):
 +<code>
 +mount -o remount,ro /                  #Remount root as Read Only
 +tune2fs -O^resize_inode /dev/mmcblk0p2    #Remove reserved GDT blocks
 +fsck.ext4 /dev/mmcblk0p2                  #Fix part, answer yes to remove GDT blocks remnants
 +</code>
 +Now, ''reboot'' and then resize the partition:
 +<code>
 +resize2fs /dev/mmcblk0p2
 +</code>
  
 ===== Manual disk image assembly ===== ===== Manual disk image assembly =====
Line 57: Line 130:
  
 ===== Devices with this installation method ===== ===== Devices with this installation method =====
----- datatable ---- +<!-- ToH: { 
-cols       BrandModelVersionsSupported Current Rel_releasecurrentInstallation method(s)_method-installationsComment installationDevice Page_pageDevice Techdata_pageid +  "source""json", 
-dynfilters +  "dom": "t", 
-filter     Model!=@@Model@@ +  "paging": true, 
-filter     : installation method(s)=SD card +  "pageLength": 25, 
-sort       : Brand +  "shownColumns": ["brand""model""version", "supportedcurrentrel", "installationmethods", "commentinstallation", "devicepage", "deviceid"]
-limit      : 25 +  "filterColumns"{"installationmethods""^SD card$", "model": "!^@@Model@@$"} 
-----+--
  • Last modified: 2024/12/13 16:42
  • by palebloodsky