##// END OF EJS Templates
a
Unknown -
r458:17a59b052c06
parent child
Show More
@@ -1,528 +1,528
1 1 # rpi23-gen-image
2 2 ## Introduction
3 3 `rpi23-gen-image.sh` is an advanced Debian Linux bootstrapping shell script for generating Debian OS images for Raspberry Pi 2 (RPi2) and Raspberry Pi 3 (RPi3) computers. The script at this time supports the bootstrapping of the Debian (armhf) releases `stretch` and `buster`. Raspberry Pi 3 images are generated for 32-bit mode only. Raspberry Pi 3 64-bit images can be generated using custom configuration parameters (```templates/rpi3-stretch-arm64-4.14.y```).
4 4
5 5 ## Build dependencies
6 6 The following list of Debian packages must be installed on the build system because they are essentially required for the bootstrapping process. The script will check if all required packages are installed and missing packages will be installed automatically if confirmed by the user.
7 7
8 8 ```debootstrap debian-archive-keyring qemu-user-static binfmt-support dosfstools rsync bmap-tools whois git bc psmisc dbus sudo```
9 9
10 10 It is recommended to configure the `rpi23-gen-image.sh` script to build and install the latest Raspberry Pi Linux kernel. For the RPi3 this is mandatory. Kernel compilation and linking will be performed on the build system using an ARM (armhf) cross-compiler toolchain.
11 11
12 12 The script has been tested using the default `crossbuild-essential-armhf` toolchain meta package on Debian Linux `stretch` build systems. Please check the [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains) for further information.
13 13
14 14 ## Command-line parameters
15 15 The script accepts certain command-line parameters to enable or disable specific OS features, services and configuration settings. These parameters are passed to the `rpi23-gen-image.sh` script via (simple) shell-variables. Unlike environment shell-variables (simple) shell-variables are defined at the beginning of the command-line call of the `rpi23-gen-image.sh` script.
16 16
17 17 ##### Command-line examples:
18 18 ```shell
19 19 ENABLE_UBOOT=true ./rpi23-gen-image.sh
20 20 ENABLE_CONSOLE=false ENABLE_IPV6=false ./rpi23-gen-image.sh
21 21 ENABLE_WM=xfce4 ENABLE_FBTURBO=true ENABLE_MINBASE=true ./rpi23-gen-image.sh
22 22 ENABLE_HARDNET=true ENABLE_IPTABLES=true /rpi23-gen-image.sh
23 23 APT_SERVER=ftp.de.debian.org APT_PROXY="http://127.0.0.1:3142/" ./rpi23-gen-image.sh
24 24 ENABLE_MINBASE=true ./rpi23-gen-image.sh
25 25 BUILD_KERNEL=true ENABLE_MINBASE=true ENABLE_IPV6=false ./rpi23-gen-image.sh
26 26 BUILD_KERNEL=true KERNELSRC_DIR=/tmp/linux ./rpi23-gen-image.sh
27 27 ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
28 28 ENABLE_CRYPTFS=true CRYPTFS_PASSWORD=changeme EXPANDROOT=false ENABLE_MINBASE=true ENABLE_REDUCE=true ENABLE_MINGPU=true BUILD_KERNEL=true ./rpi23-gen-image.sh
29 29 RELEASE=stretch BUILD_KERNEL=true ./rpi23-gen-image.sh
30 30 RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
31 31 RELEASE=stretch RPI_MODEL=3 ENABLE_WIRELESS=true ENABLE_MINBASE=true BUILD_KERNEL=true ./rpi23-gen-image.sh
32 32 ```
33 33
34 34 ## Configuration template files
35 35 To avoid long lists of command-line parameters and to help to store the favourite parameter configurations the `rpi23-gen-image.sh` script supports so called configuration template files (`CONFIG_TEMPLATE`=template). These are simple text files located in the `./templates` directory that contain the list of configuration parameters that will be used. New configuration template files can be added to the `./templates` directory.
36 36
37 37 ##### Command-line examples:
38 38 ```shell
39 39 CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh
40 40 CONFIG_TEMPLATE=rpi2stretch ./rpi23-gen-image.sh
41 41 ```
42 42
43 43 ## Supported parameters and settings
44 44 #### APT settings:
45 45 ##### `APT_SERVER`="ftp.debian.org/debian"
46 46 Set Debian packages server address. Choose a server from the list of Debian worldwide [mirror sites](https://www.debian.org/mirror/list). Using a nearby server will probably speed-up all required downloads within the bootstrapping process.
47 47
48 48 ##### `APT_PROXY`=""
49 49 Set Proxy server address. Using a local Proxy-Cache like `apt-cacher-ng` will speed-up the bootstrapping process because all required Debian packages will only be downloaded from the Debian mirror site once. If `apt-cacher-ng` is running on default `http://127.0.0.1:3142` it is autodetected and you don't need to set this.
50 50
51 51 ##### `APT_INCLUDES`=""
52 52 A comma separated list of additional packages to be installed by debootstrap during bootstrapping.
53 53
54 54 ##### `APT_INCLUDES_LATE`=""
55 55 A comma separated list of additional packages to be installed by apt after bootstrapping and after APT sources are set up. This is useful for packages with pre-depends, which debootstrap do not handle well.
56 56
57 57 ---
58 58
59 59 #### General system settings:
60 60 ##### `SET_ARCH`=32
61 61 Set Architecture to default 32bit. If you want to to compile 64bit (RPI3 or RPI3+) set it to `64`. This option will set every needed crosscompiler or boeard specific option for a successful build.
62 62 If you want to change e.g. cross-compiler -> Templates always override defaults
63 63
64 64 ##### `RPI_MODEL`=2
65 65 Specifiy the target Raspberry Pi hardware model. The script at this time supports the following Raspberry Pi models:
66 66 - `0` = Used for Raspberry Pi 0 and Raspberry Pi 0 W
67 67 - `1` = Used for Pi 1 model A and B
68 68 - `1P` = Used for Pi 1 model B+ and A+
69 69 - `2` = Used for Pi 2 model B
70 70 - `3` = Used for Pi 3 model B
71 71 - `3P` = Used for Pi 3 model B+
72 72 - `BUILD_KERNEL`=true will automatically be set if the Raspberry Pi model `3` or `3P` is used.
73 73
74 74 ##### `RELEASE`="buster"
75 75 Set the desired Debian release name. The script at this time supports the bootstrapping of the Debian releases `stretch` and `buster`.
76 76
77 77 ##### `RELEASE_ARCH`="armhf"
78 78 Set the desired Debian release architecture.
79 79
80 80 ##### `HOSTNAME`="rpi$RPI_MODEL-$RELEASE"
81 81 Set system host name. It's recommended that the host name is unique in the corresponding subnet.
82 82
83 83 ##### `PASSWORD`="raspberry"
84 84 Set system `root` password. It's **STRONGLY** recommended that you choose a custom password.
85 85
86 86 ##### `USER_PASSWORD`="raspberry"
87 87 Set password for the created non-root user `USER_NAME`=pi. Ignored if `ENABLE_USER`=false. It's **STRONGLY** recommended that you choose a custom password.
88 88
89 89 ##### `DEFLOCAL`="en_US.UTF-8"
90 90 Set default system locale. This setting can also be changed inside the running OS using the `dpkg-reconfigure locales` command. Please note that on using this parameter the script will automatically install the required packages `locales`, `keyboard-configuration` and `console-setup`.
91 91
92 92 ##### `TIMEZONE`="Europe/Berlin"
93 93 Set default system timezone. All available timezones can be found in the `/usr/share/zoneinfo/` directory. This setting can also be changed inside the running OS using the `dpkg-reconfigure tzdata` command.
94 94
95 95 ##### `EXPANDROOT`=true
96 96 Expand the root partition and filesystem automatically on first boot.
97 97
98 98 ##### `ENABLE_QEMU`=false
99 99 Generate kernel (`vexpress_defconfig`), file system image (`qcow2`) and DTB files that can be used for QEMU full system emulation (`vexpress-A15`). The output files are stored in the `$(pwd)/images/qemu` directory. You can find more information about running the generated image in the QEMU section of this readme file.
100 100
101 101 ---
102 102
103 103 #### Keyboard settings:
104 104 These options are used to configure keyboard layout in `/etc/default/keyboard` for console and Xorg. These settings can also be changed inside the running OS using the `dpkg-reconfigure keyboard-configuration` command.
105 105
106 106 ##### `XKB_MODEL`=""
107 107 Set the name of the model of your keyboard type.
108 108
109 109 ##### `XKB_LAYOUT`=""
110 110 Set the supported keyboard layout(s).
111 111
112 112 ##### `XKB_VARIANT`=""
113 113 Set the supported variant(s) of the keyboard layout(s).
114 114
115 115 ##### `XKB_OPTIONS`=""
116 116 Set extra xkb configuration options.
117 117
118 118 ---
119 119
120 120 #### Networking settings (DHCP):
121 121 This parameter is used to set up networking auto configuration in `/etc/systemd/network/eth.network`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.`
122 122
123 123 ##### `ENABLE_DHCP`=true
124 124 Set the system to use DHCP. This requires an DHCP server.
125 125
126 126 ---
127 127
128 128 #### Networking settings (static):
129 129 These parameters are used to set up a static networking configuration in `/etc/systemd/network/eth.network`. The following static networking parameters are only supported if `ENABLE_DHCP` was set to `false`. The default location of network configuration files in the Debian `stretch` release was changed to `/lib/systemd/network`.
130 130
131 131 ##### `NET_ADDRESS`=""
132 132 Set a static IPv4 or IPv6 address and its prefix, separated by "/", eg. "192.169.0.3/24".
133 133
134 134 ##### `NET_GATEWAY`=""
135 135 Set the IP address for the default gateway.
136 136
137 137 ##### `NET_DNS_1`=""
138 138 Set the IP address for the first DNS server.
139 139
140 140 ##### `NET_DNS_2`=""
141 141 Set the IP address for the second DNS server.
142 142
143 143 ##### `NET_DNS_DOMAINS`=""
144 144 Set the default DNS search domains to use for non fully qualified host names.
145 145
146 146 ##### `NET_NTP_1`=""
147 147 Set the IP address for the first NTP server.
148 148
149 149 ##### `NET_NTP_2`=""
150 150 Set the IP address for the second NTP server.
151 151
152 152 ---
153 153
154 154 #### Basic system features:
155 155 ##### `ENABLE_CONSOLE`=true
156 156 Enable serial console interface. Recommended if no monitor or keyboard is connected to the RPi2/3. In case of problems fe. if the network (auto) configuration failed - the serial console can be used to access the system. On RPI `0` `3` `3P` the CPU speed is locked at lowest speed.
157 157
158 158 ##### `ENABLE_PRINTK`=false
159 159 Enables printing kernel messages to konsole. printk is `3 4 1 3` as in raspbian.
160 160
161 161 ##### `ENABLE_BLUETOOTH`=false
162 162 Enable onboard Bluetooth interface on the RPi0/3/3P. See: https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/
163 163
164 164 ##### `ENABLE_MINIUART_OVERLAY`=false
165 165 Enable Bluetooth to use this. Adds overlay to swap UART0 with UART1. Enabling (slower) Bluetooth and full speed serial console. - RPI `0` `3` `3P` have a fast `hardware UART0` (ttyAMA0) and a `mini UART1` (ttyS0)! RPI `1` `1P` `2` only have a `hardware UART0`. `UART0` is considered better, because is faster and more stable than `mini UART1`. By default the Bluetooth modem is mapped to the `hardware UART0` and `mini UART` is used for console. The `mini UART` is a problem for the serial console, because its baudrate depends on the cpu frequency, which is changing on runtime. Resulting in a volatile baudrate and thus in an unusable serial console.
166 166
167 167 ##### `ENABLE_TURBO`=false
168 Enable Turbo mode. This setting locks cpu at highest frequency. As setting ENABLE_CONSOLE=true locks RPI to lowest CPU speed, this is can be used additionally to lock cpu hat max speed. Need a good power supply and probably cooling for the Raspberry PI.
168 VOIDS WARRANTY! Enable Turbo mode - NO overclocking. This setting locks cpu at highest frequency. As setting ENABLE_CONSOLE=true locks RPI to lowest CPU speed, this is can be used additionally to lock cpu hat max speed. Need a good power supply and probably cooling for the Raspberry PI.
169 169
170 170 ##### `ENABLE_I2C`=false
171 171 Enable I2C interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
172 172
173 173 ##### `ENABLE_SPI`=false
174 174 Enable SPI interface on the RPi2/3. Please check the [RPi2/3 pinout diagrams](https://elinux.org/RPi_Low-level_peripherals) to connect the right GPIO pins.
175 175
176 176 ##### `ENABLE_IPV6`=true
177 177 Enable IPv6 support. The network interface configuration is managed via systemd-networkd.
178 178
179 179 ##### `ENABLE_SSHD`=true
180 180 Install and enable OpenSSH service. The default configuration of the service doesn't allow `root` to login. Please use the user `pi` instead and `su -` or `sudo` to execute commands as root.
181 181
182 182 ##### `ENABLE_NONFREE`=false
183 183 Allow the installation of non-free Debian packages that do not comply with the DFSG. This is required to install closed-source firmware binary blobs.
184 184
185 185 ##### `ENABLE_WIRELESS`=false
186 186 Download and install the [closed-source firmware binary blob](https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm) that is required to run the internal wireless interface of the Raspberry Pi model `3`. This parameter is ignored if the specified `RPI_MODEL` is not `3`.
187 187
188 188 ##### `ENABLE_RSYSLOG`=true
189 189 If set to false, disable and uninstall rsyslog (so logs will be available only in journal files)
190 190
191 191 ##### `ENABLE_SOUND`=true
192 192 Enable sound hardware and install Advanced Linux Sound Architecture.
193 193
194 194 ##### `ENABLE_HWRANDOM`=true
195 195 Enable Hardware Random Number Generator. Strong random numbers are important for most network based communications that use encryption. It's recommended to be enabled.
196 196
197 197 ##### `ENABLE_MINGPU`=false
198 198 Minimize the amount of shared memory reserved for the GPU. It doesn't seem to be possible to fully disable the GPU.
199 199
200 200 ##### `ENABLE_DBUS`=true
201 201 Install and enable D-Bus message bus. Please note that systemd should work without D-bus but it's recommended to be enabled.
202 202
203 203 ##### `ENABLE_XORG`=false
204 204 Install Xorg open-source X Window System.
205 205
206 206 ##### `ENABLE_WM`=""
207 207 Install a user defined window manager for the X Window System. To make sure all X related package dependencies are getting installed `ENABLE_XORG` will automatically get enabled if `ENABLE_WM` is used. The `rpi23-gen-image.sh` script has been tested with the following list of window managers: `blackbox`, `openbox`, `fluxbox`, `jwm`, `dwm`, `xfce4`, `awesome`.
208 208
209 209 ##### `ENABLE_SYSVINIT`=false
210 210 Support for halt,init,poweroff,reboot,runlevel,shutdown,telinit commands
211 211
212 212 ---
213 213
214 214 #### Advanced system features:
215 215 ##### `ENABLE_MINBASE`=false
216 216 Use debootstrap script variant `minbase` which only includes essential packages and apt. This will reduce the disk usage by about 65 MB.
217 217
218 218 ##### `ENABLE_REDUCE`=false
219 219 Reduce the disk space usage by deleting packages and files. See `REDUCE_*` parameters for detailed information.
220 220
221 221 ##### `ENABLE_UBOOT`=false
222 222 Replace the default RPi2/3 second stage bootloader (bootcode.bin) with [U-Boot bootloader](https://git.denx.de/?p=u-boot.git;a=summary). U-Boot can boot images via the network using the BOOTP/TFTP protocol.
223 223
224 224 ##### `UBOOTSRC_DIR`=""
225 225 Path to a directory (`u-boot`) of [U-Boot bootloader sources](https://git.denx.de/?p=u-boot.git;a=summary) that will be copied, configured, build and installed inside the chroot.
226 226
227 227 ##### `ENABLE_FBTURBO`=false
228 228 Install and enable the [hardware accelerated Xorg video driver](https://github.com/ssvb/xf86-video-fbturbo) `fbturbo`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
229 229
230 230 ##### `FBTURBOSRC_DIR`=""
231 231 Path to a directory (`xf86-video-fbturbo`) of [hardware accelerated Xorg video driver sources](https://github.com/ssvb/xf86-video-fbturbo) that will be copied, configured, build and installed inside the chroot.
232 232
233 233 ##### `ENABLE_VIDEOCORE`=false
234 234 Install and enable the [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) `vcgencmd`. Please note that this driver is currently limited to hardware accelerated window moving and scrolling.
235 235
236 236 ##### `VIDEOCORESRC_DIR`=""
237 237 Path to a directory (`userland`) of [Source code for a C-based firmware patching framework for Broadcom/Cypress WiFi chips that enables you to write your own firmware patches, for example, to enable monitor mode with radiotap headers and frame injection](https://github.com/seemoo-lab/nexmon.git) that will be copied, configured, build and installed inside the chroot.
238 238
239 239 ##### `ENABLE_NEXMON`=false
240 240 Install and enable the [Source code for a C-based firmware patching framework for Broadcom/Cypress WiFi chips that enables you to write your own firmware patches, for example, to enable monitor mode with radiotap headers and frame injection](https://github.com/seemoo-lab/nexmon.git).
241 241
242 242 ##### `NEXMON_DIR`=""
243 243 Path to a directory (`nexmon`) of [Source code for ARM side libraries for interfacing to Raspberry Pi GPU](https://github.com/raspberrypi/userland) that will be copied, configured, build and installed inside the chroot.
244 244
245 245 ##### `ENABLE_IPTABLES`=false
246 246 Enable iptables IPv4/IPv6 firewall. Simplified ruleset: Allow all outgoing connections. Block all incoming connections except to OpenSSH service.
247 247
248 248 ##### `ENABLE_USER`=true
249 249 Create non-root user with password `USER_PASSWORD`=raspberry. Unless overridden with `USER_NAME`=user, username will be `pi`.
250 250
251 251 ##### `USER_NAME`=pi
252 252 Non-root user to create. Ignored if `ENABLE_USER`=false
253 253
254 254 ##### `ENABLE_ROOT`=false
255 255 Set root user password so root login will be enabled
256 256
257 257 ##### `ENABLE_HARDNET`=false
258 258 Enable IPv4/IPv6 network stack hardening settings.
259 259
260 260 ##### `ENABLE_SPLITFS`=false
261 261 Enable having root partition on an USB drive by creating two image files: one for the `/boot/firmware` mount point, and another for `/`.
262 262
263 263 ##### `CHROOT_SCRIPTS`=""
264 264 Path to a directory with scripts that should be run in the chroot before the image is finally built. Every executable file in this directory is run in lexicographical order.
265 265
266 266 ##### `ENABLE_INITRAMFS`=false
267 267 Create an initramfs that that will be loaded during the Linux startup process. `ENABLE_INITRAMFS` will automatically get enabled if `ENABLE_CRYPTFS`=true. This parameter will be ignored if `BUILD_KERNEL`=false.
268 268
269 269 ##### `ENABLE_IFNAMES`=true
270 270 Enable automatic assignment of predictable, stable network interface names for all local Ethernet, WLAN interfaces. This might create complex and long interface names.
271 271
272 272 ##### `DISABLE_UNDERVOLT_WARNINGS`=
273 273 Disable RPi2/3 under-voltage warnings and overlays. Setting the parameter to `1` will disable the warning overlay. Setting it to `2` will additionally allow RPi2/3 turbo mode when low-voltage is present.
274 274
275 275 ---
276 276
277 277 #### SSH settings:
278 278 ##### `SSH_ENABLE_ROOT`=false
279 279 Enable password root login via SSH. This may be a security risk with default password, use only in trusted environments. `ENABLE_ROOT` must be set to `true`.
280 280
281 281 ##### `SSH_DISABLE_PASSWORD_AUTH`=false
282 282 Disable password based SSH authentication. Only public key based SSH (v2) authentication will be supported.
283 283
284 284 ##### `SSH_LIMIT_USERS`=false
285 285 Limit the users that are allowed to login via SSH. Only allow user `USER_NAME`=pi and root if `SSH_ENABLE_ROOT`=true to login. This parameter will be ignored if `dropbear` SSH is used (`REDUCE_SSHD`=true).
286 286
287 287 ##### `SSH_ROOT_PUB_KEY`=""
288 288 Add SSH (v2) public key(s) from specified file to `authorized_keys` file to enable public key based SSH (v2) authentication of user `root`. The specified file can also contain multiple SSH (v2) public keys. SSH protocol version 1 is not supported. `ENABLE_ROOT` **and** `SSH_ENABLE_ROOT` must be set to `true`.
289 289
290 290 ##### `SSH_USER_PUB_KEY`=""
291 291 Add SSH (v2) public key(s) from specified file to `authorized_keys` file to enable public key based SSH (v2) authentication of user `USER_NAME`=pi. The specified file can also contain multiple SSH (v2) public keys. SSH protocol version 1 is not supported.
292 292
293 293 ---
294 294
295 295 #### Kernel compilation:
296 296 ##### `BUILD_KERNEL`=true
297 297 Build and install the latest RPi2/3 Linux kernel. Currently only the default RPi2/3 kernel configuration is used.
298 298
299 299 ##### `CROSS_COMPILE`="arm-linux-gnueabihf-"
300 300 This sets the cross compile enviornment for the compiler.
301 301
302 302 ##### `KERNEL_ARCH`="arm"
303 303 This sets the kernel architecture for the compiler.
304 304
305 305 ##### `KERNEL_IMAGE`="kernel7.img"
306 306 Name of the image file in the boot partition. If not set, `KERNEL_IMAGE` will be set to "kernel8.img" automatically if building for arm64.
307 307
308 308 ##### `KERNEL_BRANCH`=""
309 309 Name of the requested branch from the GIT location for the RPi Kernel. Default is using the current default branch from the GIT site.
310 310
311 311 ##### `QEMU_BINARY`="/usr/bin/qemu-arm-static"
312 312 Sets the QEMU enviornment for the Debian archive. If not set, `QEMU_BINARY` will be set to "/usr/bin/qemu-aarch64-static" automatically if building for arm64.
313 313
314 314 ##### `KERNEL_DEFCONFIG`="bcm2709_defconfig"
315 315 Sets the default config for kernel compiling. If not set, `KERNEL_DEFCONFIG` will be set to "bcmrpi3\_defconfig" automatically if building for arm64.
316 316
317 317 ##### `KERNEL_REDUCE`=false
318 318 Reduce the size of the generated kernel by removing unwanted device, network and filesystem drivers (experimental).
319 319
320 320 ##### `KERNEL_THREADS`=1
321 321 Number of parallel kernel building threads. If the parameter is left untouched the script will automatically determine the number of CPU cores to set the number of parallel threads to speed the kernel compilation.
322 322
323 323 ##### `KERNEL_HEADERS`=true
324 324 Install kernel headers with built kernel.
325 325
326 326 ##### `KERNEL_MENUCONFIG`=false
327 327 Start `make menuconfig` interactive menu-driven kernel configuration. The script will continue after `make menuconfig` was terminated.
328 328
329 329 ##### `KERNEL_OLDDEFCONFIG`=false
330 330 Run `make olddefconfig` to automatically set all new kernel configuration options to their recommended default values.
331 331
332 332 ##### `KERNEL_CCACHE`=false
333 333 Compile the kernel using ccache. This speeds up kernel recompilation by caching previous compilations and detecting when the same compilation is being done again.
334 334
335 335 ##### `KERNEL_REMOVESRC`=true
336 336 Remove all kernel sources from the generated OS image after it was built and installed.
337 337
338 338 ##### `KERNELSRC_DIR`=""
339 339 Path to a directory (`linux`) of [RaspberryPi Linux kernel sources](https://github.com/raspberrypi/linux) that will be copied, configured, build and installed inside the chroot.
340 340
341 341 ##### `KERNELSRC_CLEAN`=false
342 342 Clean the existing kernel sources directory `KERNELSRC_DIR` (using `make mrproper`) after it was copied to the chroot and before the compilation of the kernel has started. This parameter will be ignored if no `KERNELSRC_DIR` was specified or if `KERNELSRC_PREBUILT`=true.
343 343
344 344 ##### `KERNELSRC_CONFIG`=true
345 345 Run `make bcm2709_defconfig` (and optional `make menuconfig`) to configure the kernel sources before building. This parameter is automatically set to `true` if no existing kernel sources directory was specified using `KERNELSRC_DIR`. This parameter is ignored if `KERNELSRC_PREBUILT`=true.
346 346
347 347 ##### `KERNELSRC_USRCONFIG`=""
348 348 Copy own config file to kernel `.config`. If `KERNEL_MENUCONFIG`=true then running after copy.
349 349
350 350 ##### `KERNELSRC_PREBUILT`=false
351 351 With this parameter set to true the script expects the existing kernel sources directory to be already successfully cross-compiled. The parameters `KERNELSRC_CLEAN`, `KERNELSRC_CONFIG`, `KERNELSRC_USRCONFIG` and `KERNEL_MENUCONFIG` are ignored and no kernel compilation tasks are performed.
352 352
353 353 ##### `RPI_FIRMWARE_DIR`=""
354 354 The directory (`firmware`) containing a local copy of the firmware from the [RaspberryPi firmware project](https://github.com/raspberrypi/firmware). Default is to download the latest firmware directly from the project.
355 355
356 356 ##### `KERNEL_DEFAULT_GOV`="ONDEMAND"
357 357 Set the default cpu governor at kernel compilation. Supported values are: PERFORMANCE POWERSAVE USERSPACE ONDEMAND CONSERVATIVE SCHEDUTIL
358 358
359 359 ##### `KERNEL_NF`=false
360 360 Enable Netfilter modules as kernel modules
361 361
362 362 ##### `KERNEL_VIRT`=false
363 363 Enable Kernel KVM support (/dev/kvm)
364 364
365 365 ##### `KERNEL_ZSWAP`=false
366 366 Enable Kernel Zswap support. Best use on high RAM load and mediocre CPU load usecases
367 367
368 368 ##### `KERNEL_BPF`=true
369 369 Allow attaching eBPF programs to a cgroup using the bpf syscall (CONFIG_BPF_SYSCALL CONFIG_CGROUP_BPF) [systemd compilations about it - File /lib/systemd/system/systemd-journald.server:36 configures an IP firewall (IPAddressDeny=all), but the local system does not support BPF/cgroup based firewalls]
370 370
371 371 ---
372 372
373 373 #### Reduce disk usage:
374 374 The following list of parameters is ignored if `ENABLE_REDUCE`=false.
375 375
376 376 ##### `REDUCE_APT`=true
377 377 Configure APT to use compressed package repository lists and no package caching files.
378 378
379 379 ##### `REDUCE_DOC`=true
380 380 Remove all doc files (harsh). Configure APT to not include doc files on future `apt-get` package installations.
381 381
382 382 ##### `REDUCE_MAN`=true
383 383 Remove all man pages and info files (harsh). Configure APT to not include man pages on future `apt-get` package installations.
384 384
385 385 ##### `REDUCE_VIM`=false
386 386 Replace `vim-tiny` package by `levee` a tiny vim clone.
387 387
388 388 ##### `REDUCE_BASH`=false
389 389 Remove `bash` package and switch to `dash` shell (experimental).
390 390
391 391 ##### `REDUCE_HWDB`=true
392 392 Remove PCI related hwdb files (experimental).
393 393
394 394 ##### `REDUCE_SSHD`=true
395 395 Replace `openssh-server` with `dropbear`.
396 396
397 397 ##### `REDUCE_LOCALE`=true
398 398 Remove all `locale` translation files.
399 399
400 400 ---
401 401
402 402 #### Encrypted root partition:
403 403 ##### `ENABLE_CRYPTFS`=false
404 404 Enable full system encryption with dm-crypt. Setup a fully LUKS encrypted root partition (aes-xts-plain64:sha512) and generate required initramfs. The /boot directory will not be encrypted. This parameter will be ignored if `BUILD_KERNEL`=false. `ENABLE_CRYPTFS` is experimental. SSH-to-initramfs is currently not supported but will be soon - feel free to help.
405 405
406 406 ##### `CRYPTFS_PASSWORD`=""
407 407 Set password of the encrypted root partition. This parameter is mandatory if `ENABLE_CRYPTFS`=true.
408 408
409 409 ##### `CRYPTFS_MAPPING`="secure"
410 410 Set name of dm-crypt managed device-mapper mapping.
411 411
412 412 ##### `CRYPTFS_CIPHER`="aes-xts-plain64:sha512"
413 413 Set cipher specification string. `aes-xts*` ciphers are strongly recommended.
414 414
415 415 ##### `CRYPTFS_XTSKEYSIZE`=512
416 416 Sets key size in bits. The argument has to be a multiple of 8.
417 417
418 418 ##### `CRYPTFS_DROPBEAR`=false
419 419 Enable Dropbear Initramfs support
420 420
421 421 ##### `CRYPTFS_DROPBEAR_PUBKEY`=""
422 422 Provide path to dropbear Public RSA-OpenSSH Key
423 423
424 424 ---
425 425
426 426 #### Build settings:
427 427 ##### `BASEDIR`=$(pwd)/images/${RELEASE}
428 428 Set a path to a working directory used by the script to generate an image.
429 429
430 430 ##### `IMAGE_NAME`=${BASEDIR}/${DATE}-${KERNEL_ARCH}-${KERNEL_BRANCH}-rpi${RPI_MODEL}-${RELEASE}-${RELEASE_ARCH}
431 431 Set a filename for the output file(s). Note: the script will create $IMAGE_NAME.img if `ENABLE_SPLITFS`=false or $IMAGE_NAME-frmw.img and $IMAGE_NAME-root.img if `ENABLE_SPLITFS`=true. Note 2: If the KERNEL_BRANCH is not set, the word "CURRENT" is used.
432 432
433 433 ## Understanding the script
434 434 The functions of this script that are required for the different stages of the bootstrapping are split up into single files located inside the `bootstrap.d` directory. During the bootstrapping every script in this directory gets executed in lexicographical order:
435 435
436 436 | Script | Description |
437 437 | --- | --- |
438 438 | `10-bootstrap.sh` | Debootstrap basic system |
439 439 | `11-apt.sh` | Setup APT repositories |
440 440 | `12-locale.sh` | Setup Locales and keyboard settings |
441 441 | `13-kernel.sh` | Build and install RPi2/3 Kernel |
442 442 | `14-fstab.sh` | Setup fstab and initramfs |
443 443 | `15-rpi-config.sh` | Setup RPi2/3 config and cmdline |
444 444 | `20-networking.sh` | Setup Networking |
445 445 | `21-firewall.sh` | Setup Firewall |
446 446 | `30-security.sh` | Setup Users and Security settings |
447 447 | `31-logging.sh` | Setup Logging |
448 448 | `32-sshd.sh` | Setup SSH and public keys |
449 449 | `41-uboot.sh` | Build and Setup U-Boot |
450 450 | `42-fbturbo.sh` | Build and Setup fbturbo Xorg driver |
451 451 | `50-firstboot.sh` | First boot actions |
452 452 | `99-reduce.sh` | Reduce the disk space usage |
453 453
454 454 All the required configuration files that will be copied to the generated OS image are located inside the `files` directory. It is not recommended to modify these configuration files manually.
455 455
456 456 | Directory | Description |
457 457 | --- | --- |
458 458 | `apt` | APT management configuration files |
459 459 | `boot` | Boot and RPi2/3 configuration files |
460 460 | `dpkg` | Package Manager configuration |
461 461 | `etc` | Configuration files and rc scripts |
462 462 | `firstboot` | Scripts that get executed on first boot |
463 463 | `initramfs` | Initramfs scripts |
464 464 | `iptables` | Firewall configuration files |
465 465 | `locales` | Locales configuration |
466 466 | `modules` | Kernel Modules configuration |
467 467 | `mount` | Fstab configuration |
468 468 | `network` | Networking configuration files |
469 469 | `sysctl.d` | Swapping and Network Hardening configuration |
470 470 | `xorg` | fbturbo Xorg driver configuration |
471 471
472 472 ## Custom packages and scripts
473 473 Debian custom packages, i.e. those not in the debian repositories, can be installed by placing them in the `packages` directory. They are installed immediately after packages from the repositories are installed. Any dependencies listed in the custom packages will be downloaded automatically from the repositories. Do not list these custom packages in `APT_INCLUDES`.
474 474
475 475 Scripts in the custom.d directory will be executed after all other installation is complete but before the image is created.
476 476
477 477 ## Logging of the bootstrapping process
478 478 All information related to the bootstrapping process and the commands executed by the `rpi23-gen-image.sh` script can easily be saved into a logfile. The common shell command `script` can be used for this purpose:
479 479
480 480 ```shell
481 481 script -c 'APT_SERVER=ftp.de.debian.org ./rpi23-gen-image.sh' ./build.log
482 482 ```
483 483
484 484 ## Flashing the image file
485 485 After the image file was successfully created by the `rpi23-gen-image.sh` script it can be copied to the microSD card that will be used by the RPi2/3 computer. This can be performed by using the tools `bmaptool` or `dd`. Using `bmaptool` will probably speed-up the copy process because `bmaptool` copies more wisely than `dd`.
486 486
487 487 ##### Flashing examples:
488 488 ```shell
489 489 bmaptool copy ./images/buster/2017-01-23-rpi3-buster.img /dev/mmcblk0
490 490 dd bs=4M if=./images/buster/2017-01-23-rpi3-buster.img of=/dev/mmcblk0
491 491 ```
492 492 If you have set `ENABLE_SPLITFS`, copy the `-frmw` image on the microSD card, then the `-root` one on the USB drive:
493 493 ```shell
494 494 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-frmw.img /dev/mmcblk0
495 495 bmaptool copy ./images/buster/2017-01-23-rpi3-buster-root.img /dev/sdc
496 496 ```
497 497
498 498 ## QEMU emulation
499 499 Start QEMU full system emulation:
500 500 ```shell
501 501 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=tty1"
502 502 ```
503 503
504 504 Start QEMU full system emulation and output to console:
505 505 ```shell
506 506 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
507 507 ```
508 508
509 509 Start QEMU full system emulation with SMP and output to console:
510 510 ```shell
511 511 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -smp cpus=2,maxcpus=2 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -append "root=/dev/mmcblk0p2 rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
512 512 ```
513 513
514 514 Start QEMU full system emulation with cryptfs, initramfs and output to console:
515 515 ```shell
516 516 qemu-system-arm -m 2048M -M vexpress-a15 -cpu cortex-a15 -kernel kernel7.img -no-reboot -dtb vexpress-v2p-ca15_a7.dtb -sd ${IMAGE_NAME}.qcow2 -initrd "initramfs-${KERNEL_VERSION}" -append "root=/dev/mapper/secure cryptdevice=/dev/mmcblk0p2:secure rw rootfstype=ext4 console=ttyAMA0,115200 init=/bin/systemd" -serial stdio
517 517 ```
518 518
519 519 ## External links and references
520 520 * [Debian worldwide mirror sites](https://www.debian.org/mirror/list)
521 521 * [Debian Raspberry Pi 2 Wiki](https://wiki.debian.org/RaspberryPi2)
522 522 * [Debian CrossToolchains Wiki](https://wiki.debian.org/CrossToolchains)
523 523 * [Official Raspberry Pi Firmware on github](https://github.com/raspberrypi/firmware)
524 524 * [Official Raspberry Pi Kernel on github](https://github.com/raspberrypi/linux)
525 525 * [U-BOOT git repository](https://git.denx.de/?p=u-boot.git;a=summary)
526 526 * [Xorg DDX driver fbturbo](https://github.com/ssvb/xf86-video-fbturbo)
527 527 * [RPi3 Wireless interface firmware](https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm80211/brcm)
528 528 * [Collabora RPi2 Kernel precompiled](https://repositories.collabora.co.uk/debian/)
@@ -1,447 +1,448
1 1 #
2 2 # Build and Setup RPi2/3 Kernel
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 # Fetch and build latest raspberry kernel
9 9 if [ "$BUILD_KERNEL" = true ] ; then
10 10 # Setup source directory
11 11 mkdir -p "${KERNEL_DIR}"
12 12
13 13 # Copy existing kernel sources into chroot directory
14 14 if [ -n "$KERNELSRC_DIR" ] && [ -d "$KERNELSRC_DIR" ] ; then
15 15 # Copy kernel sources and include hidden files
16 16 cp -r "${KERNELSRC_DIR}/". "${KERNEL_DIR}"
17 17
18 18 # Clean the kernel sources
19 19 if [ "$KERNELSRC_CLEAN" = true ] && [ "$KERNELSRC_PREBUILT" = false ] ; then
20 20 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" mrproper
21 21 fi
22 22 else # KERNELSRC_DIR=""
23 23 # Create temporary directory for kernel sources
24 24 temp_dir=$(as_nobody mktemp -d)
25 25
26 26 # Fetch current RPi2/3 kernel sources
27 27 if [ -z "${KERNEL_BRANCH}" ] ; then
28 28 as_nobody -H git -C "${temp_dir}" clone --depth=1 "${KERNEL_URL}" linux
29 29 else
30 30 as_nobody -H git -C "${temp_dir}" clone --depth=1 --branch "${KERNEL_BRANCH}" "${KERNEL_URL}" linux
31 31 fi
32 32
33 33 # Copy downloaded kernel sources
34 34 cp -r "${temp_dir}/linux/"* "${KERNEL_DIR}"
35 35
36 36 # Remove temporary directory for kernel sources
37 37 rm -fr "${temp_dir}"
38 38
39 39 # Set permissions of the kernel sources
40 40 chown -R root:root "${R}/usr/src"
41 41 fi
42 42
43 43 # Calculate optimal number of kernel building threads
44 44 if [ "$KERNEL_THREADS" = "1" ] && [ -r /proc/cpuinfo ] ; then
45 45 KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
46 46 fi
47 47
48 48 # Configure and build kernel
49 49 if [ "$KERNELSRC_PREBUILT" = false ] ; then
50 50 # Remove device, network and filesystem drivers from kernel configuration
51 51 if [ "$KERNEL_REDUCE" = true ] ; then
52 52 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
53 53 sed -i\
54 54 -e "s/\(^CONFIG_SND.*\=\).*/\1n/"\
55 55 -e "s/\(^CONFIG_SOUND.*\=\).*/\1n/"\
56 56 -e "s/\(^CONFIG_AC97.*\=\).*/\1n/"\
57 57 -e "s/\(^CONFIG_VIDEO_.*\=\).*/\1n/"\
58 58 -e "s/\(^CONFIG_MEDIA_TUNER.*\=\).*/\1n/"\
59 59 -e "s/\(^CONFIG_DVB.*\=\)[ym]/\1n/"\
60 60 -e "s/\(^CONFIG_REISERFS.*\=\).*/\1n/"\
61 61 -e "s/\(^CONFIG_JFS.*\=\).*/\1n/"\
62 62 -e "s/\(^CONFIG_XFS.*\=\).*/\1n/"\
63 63 -e "s/\(^CONFIG_GFS2.*\=\).*/\1n/"\
64 64 -e "s/\(^CONFIG_OCFS2.*\=\).*/\1n/"\
65 65 -e "s/\(^CONFIG_BTRFS.*\=\).*/\1n/"\
66 66 -e "s/\(^CONFIG_HFS.*\=\).*/\1n/"\
67 67 -e "s/\(^CONFIG_JFFS2.*\=\)[ym]/\1n/"\
68 68 -e "s/\(^CONFIG_UBIFS.*\=\).*/\1n/"\
69 69 -e "s/\(^CONFIG_SQUASHFS.*\=\)[ym]/\1n/"\
70 70 -e "s/\(^CONFIG_W1.*\=\)[ym]/\1n/"\
71 71 -e "s/\(^CONFIG_HAMRADIO.*\=\).*/\1n/"\
72 72 -e "s/\(^CONFIG_CAN.*\=\).*/\1n/"\
73 73 -e "s/\(^CONFIG_IRDA.*\=\).*/\1n/"\
74 74 -e "s/\(^CONFIG_BT_.*\=\).*/\1n/"\
75 75 -e "s/\(^CONFIG_WIMAX.*\=\)[ym]/\1n/"\
76 76 -e "s/\(^CONFIG_6LOWPAN.*\=\).*/\1n/"\
77 77 -e "s/\(^CONFIG_IEEE802154.*\=\).*/\1n/"\
78 78 -e "s/\(^CONFIG_NFC.*\=\).*/\1n/"\
79 79 -e "s/\(^CONFIG_FB_TFT=.*\=\).*/\1n/"\
80 80 -e "s/\(^CONFIG_TOUCHSCREEN.*\=\).*/\1n/"\
81 81 -e "s/\(^CONFIG_USB_GSPCA_.*\=\).*/\1n/"\
82 82 -e "s/\(^CONFIG_DRM.*\=\).*/\1n/"\
83 83 "${KERNEL_DIR}/.config"
84 84 fi
85 85
86 86 if [ "$KERNELSRC_CONFIG" = true ] ; then
87 87 # Load default raspberry kernel configuration
88 88 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" "${KERNEL_DEFCONFIG}"
89 89
90 90 #Switch to KERNELSRC_DIR so we can use set_kernel_config
91 91 cd "${KERNEL_DIR}" || exit
92 92
93 93 # enable ZSWAP see https://askubuntu.com/a/472227 or https://wiki.archlinux.org/index.php/zswap
94 94 if [ "$KERNEL_ZSWAP" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
95 95 set_kernel_config CONFIG_ZPOOL y
96 96 set_kernel_config CONFIG_ZSWAP y
97 97 set_kernel_config CONFIG_ZBUD y
98 98 set_kernel_config CONFIG_Z3FOLD y
99 99 set_kernel_config CONFIG_ZSMALLOC y
100 100 set_kernel_config CONFIG_PGTABLE_MAPPING y
101 101 fi
102 102
103 103 # enable basic KVM support; see https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=210546&start=25#p1300453
104 104 if [ "$KERNEL_VIRT" = true ] && { [ "$RPI_MODEL" = 2 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
105 105 set_kernel_config CONFIG_VIRTUALIZATION y
106 106 set_kernel_config CONFIG_KVM y
107 107 set_kernel_config CONFIG_VHOST_NET m
108 108 set_kernel_config CONFIG_VHOST_CROSS_ENDIAN_LEGACY y
109 109 fi
110 110
111 111 # Netfilter kernel support See https://github.com/raspberrypi/linux/issues/2177#issuecomment-354647406
112 112 if [ "$KERNEL_NF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
113 113 set_kernel_config CONFIG_IP_NF_TARGET_SYNPROXY m
114 114 set_kernel_config CONFIG_NETFILTER_XT_MATCH_CGROUP m
115 115 set_kernel_config CONFIG_NETFILTER_XT_MATCH_IPCOMP m
116 set_kernel_config CONFIG_NETFILTER_XT_MATCH_SOCKET m
116 117 set_kernel_config CONFIG_NFT_FIB_INET m
117 118 set_kernel_config CONFIG_NFT_FIB_IPV4 m
118 119 set_kernel_config CONFIG_NFT_FIB_IPV6 m
119 120 set_kernel_config CONFIG_NFT_FIB_NETDEV m
120 121 set_kernel_config CONFIG_NFT_OBJREF m
121 122 set_kernel_config CONFIG_NFT_RT m
122 123 set_kernel_config CONFIG_NFT_SET_BITMAP m
123 set_kernel_config CONFIG_NF_CONNTRACK_TIMEOUT m
124 set_kernel_config CONFIG_NF_CONNTRACK_TIMEOUT y
124 125 set_kernel_config CONFIG_NF_LOG_ARP m
125 126 set_kernel_config CONFIG_NF_SOCKET_IPV4 m
126 127 set_kernel_config CONFIG_NF_SOCKET_IPV6 m
127 128 set_kernel_config CONFIG_BRIDGE_EBT_BROUTE m
128 129 set_kernel_config CONFIG_BRIDGE_EBT_T_FILTER m
129 130 set_kernel_config CONFIG_BRIDGE_NF_EBTABLES m
130 131 set_kernel_config CONFIG_IP6_NF_IPTABLES m
131 132 set_kernel_config CONFIG_IP6_NF_MATCH_AH m
132 133 set_kernel_config CONFIG_IP6_NF_MATCH_EUI64 m
133 134 set_kernel_config CONFIG_IP6_NF_NAT m
134 135 set_kernel_config CONFIG_IP6_NF_TARGET_MASQUERADE m
135 136 set_kernel_config CONFIG_IP6_NF_TARGET_NPT m
136 137 set_kernel_config CONFIG_IP_SET_BITMAP_IPMAC m
137 138 set_kernel_config CONFIG_IP_SET_BITMAP_PORT m
138 139 set_kernel_config CONFIG_IP_SET_HASH_IP m
139 140 set_kernel_config CONFIG_IP_SET_HASH_IPMARK m
140 141 set_kernel_config CONFIG_IP_SET_HASH_IPPORT m
141 142 set_kernel_config CONFIG_IP_SET_HASH_IPPORTIP m
142 143 set_kernel_config CONFIG_IP_SET_HASH_IPPORTNET m
143 144 set_kernel_config CONFIG_IP_SET_HASH_MAC m
144 145 set_kernel_config CONFIG_IP_SET_HASH_NET m
145 146 set_kernel_config CONFIG_IP_SET_HASH_NETIFACE m
146 147 set_kernel_config CONFIG_IP_SET_HASH_NETNET m
147 148 set_kernel_config CONFIG_IP_SET_HASH_NETPORT m
148 149 set_kernel_config CONFIG_IP_SET_HASH_NETPORTNET m
149 150 set_kernel_config CONFIG_IP_SET_LIST_SET m
150 151 set_kernel_config CONFIG_NETFILTER_XTABLES m
151 152 set_kernel_config CONFIG_NETFILTER_XTABLES m
152 153 set_kernel_config CONFIG_NFT_BRIDGE_META m
153 154 set_kernel_config CONFIG_NFT_BRIDGE_REJECT m
154 155 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV4 m
155 156 set_kernel_config CONFIG_NFT_CHAIN_NAT_IPV6 m
156 157 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV4 m
157 158 set_kernel_config CONFIG_NFT_CHAIN_ROUTE_IPV6 m
158 159 set_kernel_config CONFIG_NFT_COMPAT m
159 160 set_kernel_config CONFIG_NFT_COUNTER m
160 161 set_kernel_config CONFIG_NFT_CT m
161 162 set_kernel_config CONFIG_NFT_DUP_IPV4 m
162 163 set_kernel_config CONFIG_NFT_DUP_IPV6 m
163 164 set_kernel_config CONFIG_NFT_DUP_NETDEV m
164 165 set_kernel_config CONFIG_NFT_EXTHDR m
165 166 set_kernel_config CONFIG_NFT_FWD_NETDEV m
166 167 set_kernel_config CONFIG_NFT_HASH m
167 168 set_kernel_config CONFIG_NFT_LIMIT m
168 169 set_kernel_config CONFIG_NFT_LOG m
169 170 set_kernel_config CONFIG_NFT_MASQ m
170 171 set_kernel_config CONFIG_NFT_MASQ_IPV4 m
171 172 set_kernel_config CONFIG_NFT_MASQ_IPV6 m
172 173 set_kernel_config CONFIG_NFT_META m
173 174 set_kernel_config CONFIG_NFT_NAT m
174 175 set_kernel_config CONFIG_NFT_NUMGEN m
175 176 set_kernel_config CONFIG_NFT_QUEUE m
176 177 set_kernel_config CONFIG_NFT_QUOTA m
177 178 set_kernel_config CONFIG_NFT_REDIR m
178 179 set_kernel_config CONFIG_NFT_REDIR_IPV4 m
179 180 set_kernel_config CONFIG_NFT_REDIR_IPV6 m
180 181 set_kernel_config CONFIG_NFT_REJECT m
181 182 set_kernel_config CONFIG_NFT_REJECT_INET m
182 183 set_kernel_config CONFIG_NFT_REJECT_IPV4 m
183 184 set_kernel_config CONFIG_NFT_REJECT_IPV6 m
184 185 set_kernel_config CONFIG_NFT_SET_HASH m
185 186 set_kernel_config CONFIG_NFT_SET_RBTREE m
186 187 set_kernel_config CONFIG_NF_CONNTRACK_IPV4 m
187 188 set_kernel_config CONFIG_NF_CONNTRACK_IPV6 m
188 189 set_kernel_config CONFIG_NF_DEFRAG_IPV4 m
189 190 set_kernel_config CONFIG_NF_DEFRAG_IPV6 m
190 191 set_kernel_config CONFIG_NF_DUP_IPV4 m
191 192 set_kernel_config CONFIG_NF_DUP_IPV6 m
192 193 set_kernel_config CONFIG_NF_DUP_NETDEV m
193 194 set_kernel_config CONFIG_NF_LOG_BRIDGE m
194 195 set_kernel_config CONFIG_NF_LOG_IPV4 m
195 196 set_kernel_config CONFIG_NF_LOG_IPV6 m
196 197 set_kernel_config CONFIG_NF_NAT_IPV4 m
197 198 set_kernel_config CONFIG_NF_NAT_IPV6 m
198 199 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV4 m
199 200 set_kernel_config CONFIG_NF_NAT_MASQUERADE_IPV6 m
200 201 set_kernel_config CONFIG_NF_NAT_PPTP m
201 202 set_kernel_config CONFIG_NF_NAT_PROTO_GRE m
202 203 set_kernel_config CONFIG_NF_NAT_REDIRECT m
203 204 set_kernel_config CONFIG_NF_NAT_SIP m
204 205 set_kernel_config CONFIG_NF_NAT_SNMP_BASIC m
205 206 set_kernel_config CONFIG_NF_NAT_TFTP m
206 207 set_kernel_config CONFIG_NF_REJECT_IPV4 m
207 208 set_kernel_config CONFIG_NF_REJECT_IPV6 m
208 209 set_kernel_config CONFIG_NF_TABLES m
209 210 set_kernel_config CONFIG_NF_TABLES_ARP m
210 211 set_kernel_config CONFIG_NF_TABLES_BRIDGE m
211 212 set_kernel_config CONFIG_NF_TABLES_INET m
212 213 set_kernel_config CONFIG_NF_TABLES_IPV4 m
213 214 set_kernel_config CONFIG_NF_TABLES_IPV6 m
214 215 set_kernel_config CONFIG_NF_TABLES_NETDEV m
215 216 fi
216 217
217 218 # Enables BPF syscall for systemd-journald see https://github.com/torvalds/linux/blob/master/init/Kconfig#L848 or https://groups.google.com/forum/#!topic/linux.gentoo.user/_2aSc_ztGpA
218 219 if [ "$KERNEL_BPF" = true ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
219 220 set_kernel_config CONFIG_BPF_SYSCALL y
220 221 set_kernel_config CONFIG_BPF_EVENTS y
221 222 set_kernel_config CONFIG_BPF_STREAM_PARSER y
222 223 set_kernel_config CONFIG_CGROUP_BPF y
223 224 fi
224 225
225 226 # KERNEL_DEFAULT_GOV was set by user
226 227 if ! [ "$KERNEL_DEFAULT_GOV" = POWERSAVE ] && [ -n "$KERNEL_DEFAULT_GOV" ]; then
227 228 # unset default governor
228 229 unset_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
229 230
230 231 case "$KERNEL_DEFAULT_GOV" in
231 232 "PERFORMANCE")
232 233 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
233 234 ;;
234 235 "USERSPACE")
235 236 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE y
236 237 ;;
237 238 "ONDEMAND")
238 239 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND y
239 240 ;;
240 241 "CONSERVATIVE")
241 242 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE y
242 243 ;;
243 244 "CONSERVATIVE")
244 245 set_kernel_config CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL y
245 246 ;;
246 247 *)
247 248 echo "error: unsupported default cpu governor"
248 249 exit 1
249 250 ;;
250 251 esac
251 252 fi
252 253
253 254
254 255
255 256 #Revert to previous directory
256 257 cd "${WORKDIR}" || exit
257 258
258 259 # Set kernel configuration parameters to enable qemu emulation
259 260 if [ "$ENABLE_QEMU" = true ] ; then
260 261 echo "CONFIG_FHANDLE=y" >> "${KERNEL_DIR}"/.config
261 262 echo "CONFIG_LBDAF=y" >> "${KERNEL_DIR}"/.config
262 263
263 264 if [ "$ENABLE_CRYPTFS" = true ] ; then
264 265 {
265 266 echo "CONFIG_EMBEDDED=y"
266 267 echo "CONFIG_EXPERT=y"
267 268 echo "CONFIG_DAX=y"
268 269 echo "CONFIG_MD=y"
269 270 echo "CONFIG_BLK_DEV_MD=y"
270 271 echo "CONFIG_MD_AUTODETECT=y"
271 272 echo "CONFIG_BLK_DEV_DM=y"
272 273 echo "CONFIG_BLK_DEV_DM_BUILTIN=y"
273 274 echo "CONFIG_DM_CRYPT=y"
274 275 echo "CONFIG_CRYPTO_BLKCIPHER=y"
275 276 echo "CONFIG_CRYPTO_CBC=y"
276 277 echo "CONFIG_CRYPTO_XTS=y"
277 278 echo "CONFIG_CRYPTO_SHA512=y"
278 279 echo "CONFIG_CRYPTO_MANAGER=y"
279 280 } >> "${KERNEL_DIR}"/.config
280 281 fi
281 282 fi
282 283
283 284 # Copy custom kernel configuration file
284 285 if [ -n "$KERNELSRC_USRCONFIG" ] ; then
285 286 cp "$KERNELSRC_USRCONFIG" "${KERNEL_DIR}"/.config
286 287 fi
287 288
288 289 # Set kernel configuration parameters to their default values
289 290 if [ "$KERNEL_OLDDEFCONFIG" = true ] ; then
290 291 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig
291 292 fi
292 293
293 294 # Start menu-driven kernel configuration (interactive)
294 295 if [ "$KERNEL_MENUCONFIG" = true ] ; then
295 296 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" menuconfig
296 297 fi
297 298 # end if "$KERNELSRC_CONFIG" = true
298 299 fi
299 300
300 301 # Use ccache to cross compile the kernel
301 302 if [ "$KERNEL_CCACHE" = true ] ; then
302 303 cc="ccache ${CROSS_COMPILE}gcc"
303 304 else
304 305 cc="${CROSS_COMPILE}gcc"
305 306 fi
306 307
307 308 # Cross compile kernel and dtbs
308 309 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" "${KERNEL_BIN_IMAGE}" dtbs
309 310
310 311 # Cross compile kernel modules
311 312 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
312 313 make -C "${KERNEL_DIR}" -j"${KERNEL_THREADS}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" modules
313 314 fi
314 315 # end if "$KERNELSRC_PREBUILT" = false
315 316 fi
316 317
317 318 # Check if kernel compilation was successful
318 319 if [ ! -r "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" ] ; then
319 320 echo "error: kernel compilation failed! (kernel image not found)"
320 321 cleanup
321 322 exit 1
322 323 fi
323 324
324 325 # Install kernel modules
325 326 if [ "$ENABLE_REDUCE" = true ] ; then
326 327 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
327 328 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=../../.. modules_install
328 329 fi
329 330 else
330 331 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
331 332 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_MOD_PATH=../../.. modules_install
332 333 fi
333 334
334 335 # Install kernel firmware
335 336 if grep -q "^firmware_install:" "${KERNEL_DIR}/Makefile" ; then
336 337 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_FW_PATH=../../../lib firmware_install
337 338 fi
338 339 fi
339 340
340 341 # Install kernel headers
341 342 if [ "$KERNEL_HEADERS" = true ] && [ "$KERNEL_REDUCE" = false ] ; then
342 343 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" INSTALL_HDR_PATH=../.. headers_install
343 344 fi
344 345 # make tar.gz kernel package - missing os bzw. modules
345 346 #** ** ** WARNING ** ** **
346 347 #Your architecture did not define any architecture-dependent files
347 348 #to be placed into the tarball. Please add those to ./scripts/package/buildtar .
348 349 # make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" CC="${cc}" targz-pkg
349 350
350 351 # Prepare boot (firmware) directory
351 352 mkdir "${BOOT_DIR}"
352 353
353 354 # Get kernel release version
354 355 KERNEL_VERSION=$(cat "${KERNEL_DIR}/include/config/kernel.release")
355 356
356 357 # Copy kernel configuration file to the boot directory
357 358 install_readonly "${KERNEL_DIR}/.config" "${R}/boot/config-${KERNEL_VERSION}"
358 359
359 360 # Prepare device tree directory
360 361 mkdir "${BOOT_DIR}/overlays"
361 362
362 363 # Ensure the proper .dtb is located
363 364 if [ "$KERNEL_ARCH" = "arm" ] ; then
364 365 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/"*.dtb ; do
365 366 if [ -f "${dtb}" ] ; then
366 367 install_readonly "${dtb}" "${BOOT_DIR}/"
367 368 fi
368 369 done
369 370 else
370 371 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/broadcom/"*.dtb ; do
371 372 if [ -f "${dtb}" ] ; then
372 373 install_readonly "${dtb}" "${BOOT_DIR}/"
373 374 fi
374 375 done
375 376 fi
376 377
377 378 # Copy compiled dtb device tree files
378 379 if [ -d "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays" ] ; then
379 380 for dtb in "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/"*.dtb ; do
380 381 if [ -f "${dtb}" ] ; then
381 382 install_readonly "${dtb}" "${BOOT_DIR}/overlays/"
382 383 fi
383 384 done
384 385
385 386 if [ -f "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" ] ; then
386 387 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/dts/overlays/README" "${BOOT_DIR}/overlays/README"
387 388 fi
388 389 fi
389 390
390 391 if [ "$ENABLE_UBOOT" = false ] ; then
391 392 # Convert and copy kernel image to the boot directory
392 393 "${KERNEL_DIR}/scripts/mkknlimg" "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
393 394 else
394 395 # Copy kernel image to the boot directory
395 396 install_readonly "${KERNEL_DIR}/arch/${KERNEL_ARCH}/boot/${KERNEL_BIN_IMAGE}" "${BOOT_DIR}/${KERNEL_IMAGE}"
396 397 fi
397 398
398 399 # Remove kernel sources
399 400 if [ "$KERNEL_REMOVESRC" = true ] ; then
400 401 rm -fr "${KERNEL_DIR}"
401 402 else
402 403 # Prepare compiled kernel modules
403 404 if grep -q "CONFIG_MODULES=y" "${KERNEL_DIR}/.config" ; then
404 405 if grep -q "^modules_prepare:" "${KERNEL_DIR}/Makefile" ; then
405 406 make -C "${KERNEL_DIR}" ARCH="${KERNEL_ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" modules_prepare
406 407 fi
407 408
408 409 # Create symlinks for kernel modules
409 410 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/build"
410 411 chroot_exec ln -sf /usr/src/linux "/lib/modules/${KERNEL_VERSION}/source"
411 412 fi
412 413 fi
413 414
414 415 else # BUILD_KERNEL=false
415 416 # echo Install precompiled kernel...
416 417 # echo error: not implemented
417 418 if [ "$KERNEL_ARCH" = arm64 ] && { [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; } ; then
418 419 # Create temporary directory for dl
419 420 temp_dir=$(as_nobody mktemp -d)
420 421
421 422 # Fetch kernel dl
422 423 as_nobody wget -O "${temp_dir}"/kernel.tar.xz -c "$RPI3_64_KERNEL_URL"
423 424 #extract download
424 425 tar -xJf "${temp_dir}"/kernel.tar.xz -C "${temp_dir}"
425 426
426 427 #move extracted kernel to /boot/firmware
427 428 mkdir "${R}/boot/firmware"
428 429 cp "${temp_dir}"/boot/* "${R}"/boot/firmware/
429 430 cp -r "${temp_dir}"/lib/* "${R}"/lib/
430 431
431 432 # Remove temporary directory for kernel sources
432 433 rm -fr "${temp_dir}"
433 434 # Set permissions of the kernel sources
434 435 chown -R root:root "${R}/boot/firmware"
435 436 chown -R root:root "${R}/lib/modules"
436 437 #Create cmdline.txt for 15-rpi-config.sh
437 438 touch "${BOOT_DIR}/cmdline.txt"
438 439 fi
439 440
440 441 # Check if kernel installation was successful
441 442 KERNEL="$(ls -1 "${R}"/boot/firmware/kernel* | sort | tail -n 1)"
442 443 if [ -z "$KERNEL" ] ; then
443 444 echo "error: kernel installation failed! (/boot/kernel* not found)"
444 445 cleanup
445 446 exit 1
446 447 fi
447 448 fi
@@ -1,237 +1,240
1 1 #
2 2 # Setup RPi2/3 config and cmdline
3 3 #
4 4
5 5 # Load utility functions
6 6 . ./functions.sh
7 7
8 8 if [ "$BUILD_KERNEL" = true ] ; then
9 9 if [ -n "$RPI_FIRMWARE_DIR" ] && [ -d "$RPI_FIRMWARE_DIR" ] ; then
10 10 # Install boot binaries from local directory
11 11 cp "${RPI_FIRMWARE_DIR}"/boot/bootcode.bin "${BOOT_DIR}"/bootcode.bin
12 12 cp "${RPI_FIRMWARE_DIR}"/boot/fixup.dat "${BOOT_DIR}"/fixup.dat
13 13 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_cd.dat "${BOOT_DIR}"/fixup_cd.dat
14 14 cp "${RPI_FIRMWARE_DIR}"/boot/fixup_x.dat "${BOOT_DIR}"/fixup_x.dat
15 15 cp "${RPI_FIRMWARE_DIR}"/boot/start.elf "${BOOT_DIR}"/start.elf
16 16 cp "${RPI_FIRMWARE_DIR}"/boot/start_cd.elf "${BOOT_DIR}"/start_cd.elf
17 17 cp "${RPI_FIRMWARE_DIR}"/boot/start_x.elf "${BOOT_DIR}"/start_x.elf
18 18 else
19 19 # Create temporary directory for boot binaries
20 20 temp_dir=$(as_nobody mktemp -d)
21 21
22 22 # Install latest boot binaries from raspberry/firmware github
23 23 as_nobody wget -q -O "${temp_dir}/bootcode.bin" "${FIRMWARE_URL}/bootcode.bin"
24 24 as_nobody wget -q -O "${temp_dir}/fixup.dat" "${FIRMWARE_URL}/fixup.dat"
25 25 as_nobody wget -q -O "${temp_dir}/fixup_cd.dat" "${FIRMWARE_URL}/fixup_cd.dat"
26 26 as_nobody wget -q -O "${temp_dir}/fixup_x.dat" "${FIRMWARE_URL}/fixup_x.dat"
27 27 as_nobody wget -q -O "${temp_dir}/start.elf" "${FIRMWARE_URL}/start.elf"
28 28 as_nobody wget -q -O "${temp_dir}/start_cd.elf" "${FIRMWARE_URL}/start_cd.elf"
29 29 as_nobody wget -q -O "${temp_dir}/start_x.elf" "${FIRMWARE_URL}/start_x.elf"
30 30
31 31 # Move downloaded boot binaries
32 32 mv "${temp_dir}/"* "${BOOT_DIR}/"
33 33
34 34 # Remove temporary directory for boot binaries
35 35 rm -fr "${temp_dir}"
36 36
37 37 # Set permissions of the boot binaries
38 38 chown -R root:root "${BOOT_DIR}"
39 39 chmod -R 600 "${BOOT_DIR}"
40 40 fi
41 41 fi
42 42
43 43 # Setup firmware boot cmdline
44 44 if [ "$ENABLE_UBOOTUSB" = true ] ; then
45 45 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
46 46 else
47 47 if [ "$ENABLE_SPLITFS" = true ] ; then
48 48 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
49 49 else
50 50 CMDLINE="dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,data=writeback elevator=deadline rootwait console=tty1 init=/bin/systemd"
51 51 fi
52 52 fi
53 53
54 54 # Add encrypted root partition to cmdline.txt
55 55 if [ "$ENABLE_CRYPTFS" = true ] ; then
56 56 if [ "$ENABLE_SPLITFS" = true ] ; then
57 57 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda1/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda1:${CRYPTFS_MAPPING}/")
58 58 else
59 59 if [ "$ENABLE_UBOOTUSB" = true ] ; then
60 60 CMDLINE=$(echo "${CMDLINE}" | sed "s/sda2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/sda2:${CRYPTFS_MAPPING}/")
61 61 else
62 62 CMDLINE=$(echo "${CMDLINE}" | sed "s/mmcblk0p2/mapper\/${CRYPTFS_MAPPING} cryptdevice=\/dev\/mmcblk0p2:${CRYPTFS_MAPPING}/")
63 63 fi
64 64 fi
65 65 fi
66 66
67 67 #locks cpu at max frequency
68 68 if [ "$ENABLE_TURBO" = true ] ; then
69 69 echo "force_turbo=1" >> "${BOOT_DIR}/config.txt"
70 # helps to avoid sdcard corruption when force_turbo is enabled.
71 echo "boot_delay=1" >> "${BOOT_DIR}/config.txt"
72
70 73 fi
71 74
72 75 if [ "$ENABLE_PRINTK" = true ] ; then
73 76 install_readonly files/sysctl.d/83-rpi-printk.conf "${ETC_DIR}/sysctl.d/83-rpi-printk.conf"
74 77 fi
75 78
76 79 # Install udev rule for serial alias
77 80 install_readonly files/etc/99-com.rules "${LIB_DIR}/udev/rules.d/99-com.rules"
78 81
79 82 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ] ; then
80 83
81 84 # RPI0,3,3P Use default ttyS0 (mini-UART)as serial interface
82 85 SET_SERIAL="ttyS0"
83 86
84 87 # Bluetooth enabled
85 88 if [ "$ENABLE_BLUETOOTH" = true ] ; then
86 89 # Create temporary directory for Bluetooth sources
87 90 temp_dir=$(as_nobody mktemp -d)
88 91
89 92 # Fetch Bluetooth sources
90 93 as_nobody git -C "${temp_dir}" clone "${BLUETOOTH_URL}"
91 94
92 95 # Copy downloaded sources
93 96 mv "${temp_dir}/pi-bluetooth" "${R}/tmp/"
94 97
95 98 # Bluetooth firmware from arch aur https://aur.archlinux.org/packages/pi-bluetooth/
96 99 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" https://aur.archlinux.org/cgit/aur.git/plain/LICENCE.broadcom_bcm43xx?h=pi-bluetooth
97 100 as_nobody wget -q -O "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" https://aur.archlinux.org/cgit/aur.git/plain/BCM43430A1.hcd?h=pi-bluetooth
98 101
99 102 # Set permissions
100 103 chown -R root:root "${R}/tmp/pi-bluetooth"
101 104
102 105 # Install tools
103 106 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/btuart" "${R}/usr/bin/btuart"
104 107 install_readonly "${R}/tmp/pi-bluetooth/usr/bin/bthelper" "${R}/usr/bin/bthelper"
105 108
106 109 # Install bluetooth udev rule
107 110 install_readonly "${R}/tmp/pi-bluetooth/lib/udev/rules.d/90-pi-bluetooth.rules" "${LIB_DIR}/udev/rules.d/90-pi-bluetooth.rules"
108 111
109 112 # Install Firmware Flash file and apropiate licence
110 113 mkdir -p "$BLUETOOTH_FIRMWARE_DIR"
111 114 install_readonly "${R}/tmp/pi-bluetooth/LICENCE.broadcom_bcm43xx" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
112 115 install_readonly "${R}/tmp/pi-bluetooth/BCM43430A1.hcd" "${BLUETOOTH_FIRMWARE_DIR}/LICENCE.broadcom_bcm43xx"
113 116 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.bthelper@.service" "${ETC_DIR}/systemd/system/pi-bluetooth.bthelper@.service"
114 117 install_readonly "${R}/tmp/pi-bluetooth/debian/pi-bluetooth.hciuart.service" "${ETC_DIR}/systemd/system/pi-bluetooth.hciuart.service"
115 118
116 119 # Remove temporary directory
117 120 rm -fr "${temp_dir}"
118 121
119 122 # Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 & 15. Slow Bluetooth and slow cpu. Use /dev/ttyS0 instead of /dev/ttyAMA0
120 123 if [ "$ENABLE_MINIUART_OVERLAY" = true ] ; then
121 124 SET_SERIAL="ttyAMA0"
122 125
123 126 # set overlay to swap ttyAMA0 and ttyS0
124 127 echo "dtoverlay=pi3-miniuart-bt" >> "${BOOT_DIR}/config.txt"
125 128
126 129 # if force_turbo didn't lock cpu at high speed, lock it at low speed (XOR logic) or miniuart will be broken
127 130 if [ "$ENABLE_TURBO" = false ] ; then
128 131 echo "core_freq=250" >> "${BOOT_DIR}/config.txt"
129 132 fi
130 133
131 134 # Activate services
132 135 chroot_exec systemctl enable pi-bluetooth.hciuart.service
133 136 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
134 137 else
135 138 chroot_exec systemctl enable pi-bluetooth.hciuart.service
136 139 #chroot_exec systemctl enable pi-bluetooth.bthelper@.service
137 140 fi
138 141
139 142 else # if ENABLE_BLUETOOTH = false
140 143 # set overlay to disable bluetooth
141 144 echo "dtoverlay=pi3-disable-bt" >> "${BOOT_DIR}/config.txt"
142 145 fi # ENABLE_BLUETOOTH end
143 146
144 147 else
145 148 # RPI1,1P,2 Use default ttyAMA0 (full UART) as serial interface
146 149 SET_SERIAL="ttyAMA0"
147 150 fi
148 151
149 152 # may need sudo systemctl disable hciuart
150 153 if [ "$ENABLE_CONSOLE" = true ] ; then
151 154 echo "enable_uart=1" >> "${BOOT_DIR}/config.txt"
152 155 # add string to cmdline
153 156 CMDLINE="${CMDLINE} console=serial0,115200"
154 157
155 158 # Enable serial console systemd style
156 159 chroot_exec systemctl enable serial-getty@"$SET_SERIAL".service
157 160 else
158 161 echo "enable_uart=0" >> "${BOOT_DIR}/config.txt"
159 162 # disable serial console systemd style
160 163 chroot_exec systemctl disable serial-getty@"$SET_SERIAL".service
161 164 fi
162 165
163 166 # Remove IPv6 networking support
164 167 if [ "$ENABLE_IPV6" = false ] ; then
165 168 CMDLINE="${CMDLINE} ipv6.disable=1"
166 169 fi
167 170
168 171 # Automatically assign predictable network interface names
169 172 if [ "$ENABLE_IFNAMES" = false ] ; then
170 173 CMDLINE="${CMDLINE} net.ifnames=0"
171 174 else
172 175 CMDLINE="${CMDLINE} net.ifnames=1"
173 176 fi
174 177
175 178 # Install firmware boot cmdline
176 179 echo "${CMDLINE}" > "${BOOT_DIR}/cmdline.txt"
177 180
178 181 # Install firmware config
179 182 install_readonly files/boot/config.txt "${BOOT_DIR}/config.txt"
180 183
181 184 # Setup minimal GPU memory allocation size: 16MB (no X)
182 185 if [ "$ENABLE_MINGPU" = true ] ; then
183 186 echo "gpu_mem=16" >> "${BOOT_DIR}/config.txt"
184 187 fi
185 188
186 189 # Setup boot with initramfs
187 190 if [ "$ENABLE_INITRAMFS" = true ] ; then
188 191 echo "initramfs initramfs-${KERNEL_VERSION} followkernel" >> "${BOOT_DIR}/config.txt"
189 192 fi
190 193
191 194 # Create firmware configuration and cmdline symlinks
192 195 ln -sf firmware/config.txt "${R}/boot/config.txt"
193 196 ln -sf firmware/cmdline.txt "${R}/boot/cmdline.txt"
194 197
195 198 # Install and setup kernel modules to load at boot
196 199 mkdir -p "${LIB_DIR}/modules-load.d/"
197 200 install_readonly files/modules/rpi2.conf "${LIB_DIR}/modules-load.d/rpi2.conf"
198 201
199 202 # Load hardware random module at boot
200 203 if [ "$ENABLE_HWRANDOM" = true ] && [ "$BUILD_KERNEL" = false ] ; then
201 204 sed -i "s/^# bcm2708_rng/bcm2708_rng/" "${LIB_DIR}/modules-load.d/rpi2.conf"
202 205 fi
203 206
204 207 # Load sound module at boot
205 208 if [ "$ENABLE_SOUND" = true ] ; then
206 209 sed -i "s/^# snd_bcm2835/snd_bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
207 210 else
208 211 echo "dtparam=audio=off" >> "${BOOT_DIR}/config.txt"
209 212 fi
210 213
211 214 # Enable I2C interface
212 215 if [ "$ENABLE_I2C" = true ] ; then
213 216 echo "dtparam=i2c_arm=on" >> "${BOOT_DIR}/config.txt"
214 217 sed -i "s/^# i2c-bcm2708/i2c-bcm2708/" "${LIB_DIR}/modules-load.d/rpi2.conf"
215 218 sed -i "s/^# i2c-dev/i2c-dev/" "${LIB_DIR}/modules-load.d/rpi2.conf"
216 219 fi
217 220
218 221 # Enable SPI interface
219 222 if [ "$ENABLE_SPI" = true ] ; then
220 223 echo "dtparam=spi=on" >> "${BOOT_DIR}/config.txt"
221 224 echo "spi-bcm2708" >> "${LIB_DIR}/modules-load.d/rpi2.conf"
222 225 if [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 3P ]; then
223 226 sed -i "s/spi-bcm2708/spi-bcm2835/" "${LIB_DIR}/modules-load.d/rpi2.conf"
224 227 fi
225 228 fi
226 229
227 230 # Disable RPi2/3 under-voltage warnings
228 231 if [ -n "$DISABLE_UNDERVOLT_WARNINGS" ] ; then
229 232 echo "avoid_warnings=${DISABLE_UNDERVOLT_WARNINGS}" >> "${BOOT_DIR}/config.txt"
230 233 fi
231 234
232 235 # Install kernel modules blacklist
233 236 mkdir -p "${ETC_DIR}/modprobe.d/"
234 237 install_readonly files/modules/raspi-blacklist.conf "${ETC_DIR}/modprobe.d/raspi-blacklist.conf"
235 238
236 239 # Install sysctl.d configuration files
237 240 install_readonly files/sysctl.d/81-rpi-vm.conf "${ETC_DIR}/sysctl.d/81-rpi-vm.conf"
@@ -1,87 +1,107
1 1 #!/bin/sh
2 2 #
3 3 # Build and Setup nexmon with monitor mode patch
4 4 #
5 5
6 6 # Load utility functions
7 7 . ./functions.sh
8 8
9 9 if [ "$ENABLE_NEXMON" = true ] && [ "$ENABLE_WIRELESS" = true ]; then
10 10
11 11 # Create temporary directory for nexmon sources
12 12 temp_dir=$(as_nobody mktemp -d)
13 13
14 14 # Fetch nexmon sources
15 15 as_nobody git -C "${temp_dir}" clone "${NEXMON_URL}"
16 16
17 17 # Copy downloaded nexmon sources
18 18 mv "${temp_dir}/nexmon" "${R}"/tmp/
19 19
20 20 # Set permissions of the nexmon sources
21 21 chown -R root:root "${R}"/tmp/nexmon
22 22
23 23 # Set script Root
24 NEXMON_ROOT="${R}"/tmp/nexmon
24 export NEXMON_ROOT="${R}"/tmp/nexmon
25 25
26 26 # Remove temporary directory for nexmon sources
27 27 rm -fr "${temp_dir}"
28 28
29 29 # Build nexmon firmware outside the build system, if we can.
30 30 cd "${NEXMON_ROOT}" || exit
31 31
32 32 # Disable statistics
33 33 touch DISABLE_STATISTICS
34 34
35 35 # Setup Enviroment: see https://github.com/NoobieDog/nexmon/blob/master/setup_env.sh
36 36 #ARCH="${KERNEL_ARCH}"
37 37 #SUBARCH="${KERNEL_ARCH}"
38 KERNEL="${KERNEL_IMAGE}"
39 ARCH=arm
40 SUBARCH=arm
41 CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
42 CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
43 ZLIBFLATE="zlib-flate -compress"
44 Q=@
45 NEXMON_SETUP_ENV=1
38 export KERNEL="${KERNEL_IMAGE}"
39 export ARCH=arm
40 export SUBARCH=arm
41 export CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
42 export CCPLUGIN="${NEXMON_ROOT}"/buildtools/gcc-nexmon-plugin/nexmon.so
43 export ZLIBFLATE="zlib-flate -compress"
44 export Q=@
45 export NEXMON_SETUP_ENV=1
46 export HOSTUNAME=$(uname -s)
47 export PLATFORMUNAME=$(uname -m)
46 48 #. ./setup_env.sh
47 49
48 50 # Make nexmon
49 51 make
50 52
51 53 # Make ancient isl build
52 54 cd buildtools/isl-0.10 || exit
53 55 CC="${CC}"gcc
54 56 ./configure
55 57 make
56 58
57 59 # build patches
58 60 if [ "$RPI_MODEL" = 0 ] || [ "$RPI_MODEL" = 3 ] ; then
59 61 cd "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon || exit
60 62 make clean
61 63
62 64 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
63 65 LD_LIBRARY_PATH="${NEXMON_ROOT}"/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
64 66
65 67 # copy RPi0W & RPi3 firmware
66 68 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.org.bin
67 69 cp "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.nexmon.bin
68 70 cp -f "${NEXMON_ROOT}"/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43430-sdio.bin
69 71 fi
70 72
71 73 if [ "$RPI_MODEL" = 3P ] ; then
72 74 cd "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon || exit
73 75 make clean
74 76
75 77 # We do this so we don't have to install the ancient isl version into /usr/local/lib on systems.
76 78 LD_LIBRARY_PATH=${NEXMON_ROOT}/buildtools/isl-0.10/.libs make ARCH="${KERNEL_ARCH}" CC="${NEXMON_ROOT}"/buildtools/gcc-arm-none-eabi-5_4-2016q2-linux-x86/bin/arm-none-eabi-
77 79
78 80 # RPi3B+ firmware
79 81 mv "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.org.bin
80 82 cp "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.nexmon.bin
81 83 cp -f "${NEXMON_ROOT}"/patches/bcm43455c0/7_45_154/nexmon/brcmfmac43455-sdio.bin "${WLAN_FIRMWARE_DIR}"/brcmfmac43455-sdio.bin
82 84 fi
83 85
86 # Install kernel module
87 "${LIB_DIR}"/modules/${KERNEL_VERSION}/
88
84 89 #Revert to previous directory
85 90 cd "${WORKDIR}" || exit
86 91
87 92 fi
93
94 ## To make the RPi load the modified driver after reboot
95 # Find the path of the default driver at reboot
96 # e.g. '/lib/modules/4.14.71-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko'
97 PATH_OF_DEFAULT_DRIVER_AT_REBOOT=$(modinfo brcmfmac | grep -m 1 -oP "^filename:(\s*?)(.*)$" | sed -e 's/^filename:\(\s*\)\(.*\)$/\2/g')
98 # Backup the original driver
99 mv $PATH_OF_DEFAULT_DRIVER_AT_REBOOT "$PATH_OF_DEFAULT_DRIVER_AT_REBOOT.orig"
100 # Copy the modified driver (Kernel 4.14)
101 if is_pizero ; then
102 cp ./patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac_4.14.y-nexmon/brcmfmac.ko $PATH_OF_DEFAULT_DRIVER_AT_REBOOT
103 else
104 cp ./patches/bcm43455c0/7_45_154/nexmon/brcmfmac_4.14.y-nexmon/brcmfmac.ko $PATH_OF_DEFAULT_DRIVER_AT_REBOOT
105 fi
106 # Probe all modules and generate new dependency
107 depmod -a No newline at end of file
@@ -1,97 +1,97
1 1 #!/bin/sh
2 2 # This file contains utility functions used by rpi23-gen-image.sh
3 3
4 4 cleanup (){
5 5 set +x
6 6 set +e
7 7
8 8 # Identify and kill all processes still using files
9 9 echo "killing processes using mount point ..."
10 10 fuser -k "${R}"
11 11 sleep 3
12 12 fuser -9 -k -v "${R}"
13 13
14 14 # Clean up temporary .password file
15 15 if [ -r ".password" ] ; then
16 16 shred -zu .password
17 17 fi
18 18
19 19 # Clean up all temporary mount points
20 20 echo "removing temporary mount points ..."
21 21 umount -l "${R}/proc" 2> /dev/null
22 22 umount -l "${R}/sys" 2> /dev/null
23 23 umount -l "${R}/dev/pts" 2> /dev/null
24 24 umount "$BUILDDIR/mount/boot/firmware" 2> /dev/null
25 25 umount "$BUILDDIR/mount" 2> /dev/null
26 26 cryptsetup close "${CRYPTFS_MAPPING}" 2> /dev/null
27 27 losetup -d "$ROOT_LOOP" 2> /dev/null
28 28 losetup -d "$FRMW_LOOP" 2> /dev/null
29 29 trap - 0 1 2 3 6
30 30 }
31 31
32 32 chroot_exec() {
33 33 # Exec command in chroot
34 34 LANG=C LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot "${R}" "$@"
35 35 }
36 36
37 37 as_nobody() {
38 38 # Exec command as user nobody
39 39 sudo -E -u nobody LANG=C LC_ALL=C "$@"
40 40 }
41 41
42 42 install_readonly() {
43 43 # Install file with user read-only permissions
44 44 install -o root -g root -m 644 "$@"
45 45 }
46 46
47 47 install_exec() {
48 48 # Install file with root exec permissions
49 49 install -o root -g root -m 744 "$@"
50 50 }
51 51
52 52 use_template () {
53 53 # Test if configuration template file exists
54 54 if [ ! -r "./templates/${CONFIG_TEMPLATE}" ] ; then
55 55 echo "error: configuration template ${CONFIG_TEMPLATE} not found"
56 56 exit 1
57 57 fi
58 58
59 59 # Load template configuration parameters
60 60 . "./templates/${CONFIG_TEMPLATE}"
61 61 }
62 62
63 63 chroot_install_cc() {
64 64 # Install c/c++ build environment inside the chroot
65 65 if [ -z "${COMPILER_PACKAGES}" ] ; then
66 66 COMPILER_PACKAGES=$(chroot_exec apt-get -s install g++ make bc | grep "^Inst " | awk -v ORS=" " '{ print $2 }')
67 67 # Install COMPILER_PACKAGES in chroot
68 68 chroot_exec apt-get -q -y --allow-unauthenticated --no-install-recommends install "${COMPILER_PACKAGES}"
69 69 fi
70 70 }
71 71
72 72 chroot_remove_cc() {
73 73 # Remove c/c++ build environment from the chroot
74 74 if [ -n "${COMPILER_PACKAGES}" ] ; then
75 75 chroot_exec apt-get -qq -y --auto-remove purge "${COMPILER_PACKAGES}"
76 76 COMPILER_PACKAGES=""
77 77 fi
78 78 }
79 79 #GPL v2.0
80 80 #https://github.com/sakaki-/bcmrpi3-kernel-bis/blob/master/conform_config.sh
81 81 set_kernel_config() {
82 82 # flag as $1, value to set as $2, config must exist at "./.config"
83 TGT="${1}"
83 TGT="CONFIG_${1#CONFIG_}"
84 84 REP="${2}"
85 85 if grep -q "^${TGT}[^_]" .config; then
86 86 sed -i "s/^\(${TGT}=.*\|# ${TGT} is not set\)/${TGT}=${REP}/" .config
87 87 else
88 88 echo "${TGT}"="${2}" >> .config
89 89 fi
90 90 }
91 91
92 92 unset_kernel_config() {
93 93 # unsets flag with the value of $1, config must exist at "./.config"
94 94 TGT="CONFIG_${1#CONFIG_}"
95 95 sed -i "s/^${TGT}=.*/# ${TGT} is not set/" .config
96 96 }
97 97 # No newline at end of file
General Comments 0
Vous devez vous connecter pour laisser un commentaire. Se connecter maintenant