1 | | {{{#!html |
2 | | <div id="wikipage" class="trac-content"><p> |
3 | | </p><div class="wiki-toc"> |
4 | | <ol> |
5 | | <li> |
6 | | <a href="#AlternateBootDevice">Alternate Boot Device</a> |
7 | | <ol> |
8 | | <li> |
9 | | <ol> |
10 | | <li> |
11 | | <a href="#FlashMapping">Flash Mapping</a> |
12 | | </li> |
13 | | </ol> |
14 | | </li> |
15 | | <li> |
16 | | <a href="#AutoSwitchBootDevice">Auto Switch Boot Device</a> |
17 | | <ol> |
18 | | <li> |
19 | | <a href="#FromLinux">From Linux</a> |
20 | | </li> |
21 | | <li> |
22 | | <a href="#Fromu-boot">From u-boot</a> |
23 | | </li> |
24 | | </ol> |
25 | | </li> |
26 | | <li> |
27 | | <a href="#AlternateBootFlashfirmwareimages">Alternate Boot Flash firmware images</a> |
28 | | <ol> |
29 | | <li> |
30 | | <a href="#Step1.Bootloader">Step 1. Bootloader</a> |
31 | | </li> |
32 | | <li> |
33 | | <a href="#Step2.KernelRootFilesystem">Step 2. Kernel / Root Filesystem</a> |
34 | | </li> |
35 | | <li> |
36 | | <a href="#Usingu-boot-2014.10-cns3xxxbootloader">Using u-boot-2014.10-cns3xxx bootloader</a> |
37 | | </li> |
38 | | </ol> |
39 | | </li> |
40 | | </ol> |
41 | | </li> |
42 | | </ol> |
43 | | </div><p> |
44 | | </p> |
45 | | <h1 id="AlternateBootDevice">Alternate Boot Device</h1> |
46 | | <p> |
| 1 | [[PageOutline]] |
| 2 | |
| 3 | = Alternate Boot Device |
48 | | </p> |
49 | | <p> |
50 | | Please note that if you have a board with a 4MB SPI flash device, such as the GW2388-4 you will need to use <a class="ext-link" href="https://github.com/Gateworks/u-boot-cns3xxx"><span class="icon"></span>u-boot-2014.10 cns3xxx</a> bootloader. |
51 | | </p> |
52 | | <p> |
53 | | There are 2 ways that you can instruct the '<a class="wiki" href="/wiki/gsc">Gateworks System Controller</a>' to boot to the <strong>alternate boot device (an SPI FLASH device) vs the primary boot device (a NOR FLASH device)</strong>: |
54 | | </p> |
55 | | <ol><li>set GSC R0.3 and press the user pushbutton 5x times to perform a 1-time hard reboot to the alternate boot device |
56 | | <pre class="wiki">i2cset -f -y 0 0x20 0 0x08 |
57 | | </pre></li><li>set GSC R1.6 (SWITCH_BOOT_ENABLE) to enable 'switch boot check'. If this is set when the board powers on, it will 'toggle' boot device selection and reboot after 30 seconds unless GSC R1.7 (SWITCH_BOOT_CLEAR) has been set before that time. Note that the countdown timer is only activated when the board powers on from a GSC sleep or unpowered state |
58 | | </li></ol><h3 id="FlashMapping">Flash Mapping</h3> |
59 | | <p> |
| 5 | |
| 6 | Please note that if you have a board with a 4MB SPI flash device, such as the GW2388-4 you will need to use [https://github.com/Gateworks/u-boot-cns3xxx u-boot-2014.10 cns3xxx] bootloader. |
| 7 | |
| 8 | There are 2 ways that you can instruct the [wiki:gsc Gateworks System Controller] to boot to the **alternate boot device (an SPI FLASH device) vs the primary boot device (a NOR FLASH device)**: |
| 9 | 1. set GSC R0.3 and press the user pushbutton 5x times to perform a 1-time hard reboot to the alternate boot device |
| 10 | {{{#!bash |
| 11 | i2cset -f -y 0 0x20 0 0x08 |
| 12 | }}} |
| 13 | 2. set GSC R1.6 (SWITCH_BOOT_ENABLE) to enable 'switch boot check'. If this is set when the board powers on, it will 'toggle' boot device selection and reboot after 30 seconds unless GSC R1.7 (SWITCH_BOOT_CLEAR) has been set before that time. Note that the countdown timer is only activated when the board powers on from a GSC sleep or unpowered state |
| 14 | |
| 15 | == Flash Mapping |
121 | | </p> |
122 | | <pre class="wiki">Laguna > imw 0x20 6 0x05 1 # LSB (5 secs) |
123 | | Laguna > imw 0x20 7 0x00 1 |
124 | | Laguna > imw 0x20 8 0x00 1 |
125 | | Laguna > imw 0x20 9 0x00 1 # MSB |
126 | | Laguna > imw 0x20 1 0x04 1 # latch R6-R9 and add to RTC |
127 | | Laguna > imw 0x20 1 0x43 1 # set SWITCH_BOOT_ENABLE (R1.6), sleep operation (R1.0) and activate sleep (R1.1) |
128 | | </pre><h2 id="AlternateBootFlashfirmwareimages">Alternate Boot Flash firmware images</h2> |
129 | | <h3 id="Step1.Bootloader">Step 1. Bootloader</h3> |
130 | | <p> |
131 | | The alternate boot device and the primary boot device require different bootloaders <strong>(SPI vs NOR FLASH)</strong>. Only the primary boot device is programmed with a bootable image by Gateworks. In order to program the alternate boot device you will need to do so from Linux (as u-boot-nor.bin on the primary boot device without modification can only access NOR flash). |
132 | | </p> |
133 | | <p> |
134 | | <strong>REQUIRED: You will also need to modify your Linux kernel to allow writing to the u-boot partition of SPI flash by commenting out the '.mask_flags = MTD_WRITEABLE' in the laguna_spi_partitions structure in:</strong> |
135 | | </p> |
136 | | <blockquote> |
137 | | <p> |
| 79 | {{{#!bash |
| 80 | Laguna > imw 0x20 6 0x05 1 # LSB (5 secs) |
| 81 | Laguna > imw 0x20 7 0x00 1 |
| 82 | Laguna > imw 0x20 8 0x00 1 |
| 83 | Laguna > imw 0x20 9 0x00 1 # MSB |
| 84 | Laguna > imw 0x20 1 0x04 1 # latch R6-R9 and add to RTC |
| 85 | Laguna > imw 0x20 1 0x43 1 # set SWITCH_BOOT_ENABLE (R1.6), sleep operation (R1.0) and activate sleep (R1.1) |
| 86 | }}} |
| 87 | |
| 88 | |
| 89 | == Alternate Boot Flash firmware images |
| 90 | |
| 91 | === Step 1. Bootloader |
| 92 | The alternate boot device and the primary boot device require different bootloaders **(SPI vs NOR FLASH)**. Only the primary boot device is programmed with a bootable image by Gateworks. In order to program the alternate boot device you will need to do so from Linux (as u-boot-nor.bin on the primary boot device without modification can only access NOR flash). |
| 93 | |
| 94 | **REQUIRED: You will also need to modify your Linux kernel to allow writing to the u-boot partition of SPI flash by commenting out the '.mask_flags = MTD_WRITEABLE' in the laguna_spi_partitions structure in:** |
| 95 | {{{ |
151 | | root@OpenWrt:/# |
152 | | </pre><p> |
153 | | Now you can follow the instructions above to boot off the <strong>Alternate Boot Device</strong> (SPI Flash) and setup your kernel/rootfs using the instructions for an SPI FLASH device such as the GW2380 found here <a class="wiki" href="/wiki/laguna/openwrt">here</a> |
154 | | </p> |
155 | | <h3 id="Step2.KernelRootFilesystem">Step 2. Kernel / Root Filesystem</h3> |
156 | | <p> |
157 | | Depending on the size of the SPI FLASH you will likely <strong>need to prune features from your kernel/filesystem</strong>. A good starting point may be the Laguna <a class="ext-link" href="https://github.com/Gateworks/openwrt/blob/16.02/gateworks/configs/cns3xxx/.config_test"><span class="icon"></span>test_config</a> file which uses a ramdisk and a minimal set of utilities used by Gateworks to test boards. As this <a class="wiki" href="/wiki/OpenWrt">OpenWrt</a> config file specifies an INTRAMFS ramdisk, you only need to flash the kernel which includes the root filesystem. |
158 | | </p> |
159 | | <ol><li>Use the instructions above to boot from the <strong>Alternate Boot Device</strong> (SPI FLASH) and break out into the bootloader. You can determine that you are booted to the <strong>Alternate Boot Device</strong> by seeing a smaller FLASH size in the boot header or by looking at the output of 'printenv bootcmd' and seeing that it boots a kernel from 0x60080000 (SPI FLASH) instead of 0x10080000 (NOR FLASH) |
160 | | <pre class="wiki">... |
| 107 | root@OpenWrt:/# |
| 108 | }}} |
| 109 | |
| 110 | Now you can follow the instructions above to boot off the **Alternate Boot Device** (SPI Flash) and setup your kernel/rootfs using the instructions for an SPI FLASH device such as the GW2380 found here here |
| 111 | |
| 112 | === Step 2. Kernel / Root Filesystem |
| 113 | Depending on the size of the SPI FLASH you will likely **need to prune features from your kernel/filesystem**. A good starting point may be the Laguna test_config file which uses a ramdisk and a minimal set of utilities used by Gateworks to test boards. As this OpenWrt config file specifies an INTRAMFS ramdisk, you only need to flash the kernel which includes the root filesystem. |
| 114 | |
| 115 | 1. Use the instructions above to boot from the **Alternate Boot Device** (SPI FLASH) and break out into the bootloader. You can determine that you are booted to the **Alternate Boot Device** by seeing a smaller FLASH size in the boot header or by looking at the output of 'printenv bootcmd' and seeing that it boots a kernel from 0x60080000 (SPI FLASH) instead of 0x10080000 (NOR FLASH) |
| 116 | {{{#!bash |
| 117 | ... |
164 | | </pre></li></ol><ol start="2"><li>set R1.7 (SWITCH_BOOT_CLEAR) so that you have plenty of time to write the kernel to the SPI Flash: |
165 | | <pre class="wiki">Laguna > imw 0x20 1 0xc0 1 # set SWITCH_BOOT_CLEAR (R1.7) |
166 | | </pre></li></ol><ol start="3"><li>set ipaddr/serverip according to your network. For example if your server is at 192.168.1.14 and your target is to be 192.168.1.211: |
167 | | <pre class="wiki">Laguna> sete ipaddr 192.168.1.211 |
168 | | Laguna> sete serverip 192.168.1.14 |
169 | | </pre></li></ol><ol start="4"><li>Erase what is currently in the SPI FLASH: (This is a range, start and end for a specific flash size. Example 16MB SPI below) |
170 | | <pre class="wiki">Laguna> erase 0x60080000 0x60ffffff |
171 | | </pre></li></ol><ol start="5"><li>Copy Kernel+Root-filesystem to the Board |
172 | | <pre class="wiki">Laguna> tftpboot 0x00800000 laguna/openwrt-cns3xxx-uImage_ramdisk |
173 | | Laguna> cp.b 0x00800000 0x60080000 $(filesize) |
174 | | </pre></li></ol><ol start="6"><li>Set kernel commandline for booting a ramdisk: |
175 | | <pre class="wiki">setenv bootargs 'console=ttyS0,115200 root=/dev/ram0 rootfstype=ramfs' |
| 121 | }}} |
| 122 | 1. set R1.7 (SWITCH_BOOT_CLEAR) so that you have plenty of time to write the kernel to the SPI Flash: |
| 123 | {{{#!bash |
| 124 | Laguna > imw 0x20 1 0xc0 1 # set SWITCH_BOOT_CLEAR (R1.7) |
| 125 | }}} |
| 126 | 1. set ipaddr/serverip according to your network. For example if your server is at 192.168.1.14 and your target is to be 192.168.1.211: |
| 127 | {{{#!bash |
| 128 | Laguna> sete ipaddr 192.168.1.211 |
| 129 | Laguna> sete serverip 192.168.1.14 |
| 130 | }}} |
| 131 | 1. Erase what is currently in the SPI FLASH: (This is a range, start and end for a specific flash size. Example 16MB SPI below) |
| 132 | {{{#!bash |
| 133 | Laguna> erase 0x60080000 0x60ffffff |
| 134 | }}} |
| 135 | 1. Copy Kernel+Root-filesystem to the Board |
| 136 | {{{#!bash |
| 137 | Laguna> tftpboot 0x00800000 laguna/openwrt-cns3xxx-uImage_ramdisk |
| 138 | Laguna> cp.b 0x00800000 0x60080000 $(filesize) |
| 139 | }}} |
| 140 | 1. Set kernel commandline for booting a ramdisk: |
| 141 | {{{#!bash |
| 142 | setenv bootargs 'console=ttyS0,115200 root=/dev/ram0 rootfstype=ramfs' |
181 | | </p> |
182 | | <ul><li>when using the SPI FLASH device you can erase the u-boot env flash section and restore factory defaults with: |
183 | | <pre class="wiki">Laguna> protect off 0x60040000 +0x40000 |
184 | | Laguna> erase 0x60040000 +0x40000 |
185 | | Laguna> reset |
186 | | </pre></li></ul><h3 id="Usingu-boot-2014.10-cns3xxxbootloader">Using u-boot-2014.10-cns3xxx bootloader</h3> |
187 | | <p> |
188 | | If using the <a class="ext-link" href="https://github.com/Gateworks/u-boot-cns3xxx"><span class="icon"></span>u-boot-2014.10-cns3xxx</a> which supports both the 16MB and 4MB SPI flash devices used on Laguna products, you will need to use the 'sf' commands within uboot to access flash. |
189 | | </p> |
190 | | <p> |
| 151 | * when using the SPI FLASH device you can erase the u-boot env flash section and restore factory defaults with: |
| 152 | {{{#!bash |
| 153 | Laguna> protect off 0x60040000 +0x40000 |
| 154 | Laguna> erase 0x60040000 +0x40000 |
| 155 | Laguna> reset |
| 156 | }}} |
| 157 | |
| 158 | === Using u-boot-2014.10-cns3xxx bootloader |
| 159 | If using the [https://github.com/Gateworks/u-boot-cns3xxx u-boot-2014.10-cns3xxx] which supports both the 16MB and 4MB SPI flash devices used on Laguna products, you will need to use the 'sf' commands within uboot to access flash. |
| 160 | |