OpenWrt Forum Archive

Topic: I could be booting OpenWrt on Raspberry Pi Zero W

The content of this topic has been archived on 23 Apr 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

Hi, everyone.

I have a good news.
I could be booting OpenWrt on the Raspberry Pi Zero W.
The Raspberry Pi Zero W is new model Raspberry Pi.
It includes Wifi and Bluetooth function on board.

Last week, I bought it and I tried to booting OpenWRT latest version on it.
But, it couldn't be booting. Then I checked a patch of Raspbian for it.
And I got patch files and I applied that to OpenWRT source code.
Yesterday, I completed make it. It's wonderful. I'm very happy!
I upload patch file on here next time.

Bye.

(Last edited by factory3s.com on 11 Mar 2017, 13:08)

Hi, everyone.
I upload this information.

The files were updated.

---
target/linux/brcm2708/base-files/etc/board.d/02_network
target/linux/brcm2708/base-files/etc/diag.sh
target/linux/brcm2708/base-files/lib/brcm2708.sh
target/linux/brcm2708/image/Makefile
target/linux/brcm2708/patches-4.4/0391-BCM270X_DT-Add-bcm2708-rpi-0-w.dts.patch
package/kernel/brcm2708-gpu-fw/Makefile
package/base-files/files/etc/rc.local
---

Details of the update (patch) are as follows.

---

--- a/target/linux/brcm2708/base-files/etc/board.d/02_network
+++ b/target/linux/brcm2708/base-files/etc/board.d/02_network
@@ -11,6 +11,9 @@
board=$(brcm2708_board_name)

case "$board" in
+rpi-0-w)
+    ucidef_set_interface_lan "wlan0"
+    ;;
rpi-b |\
rpi-b-plus |\
rpi-2-b |\
--- a/target/linux/brcm2708/base-files/etc/diag.sh
+++ b/target/linux/brcm2708/base-files/etc/diag.sh
@@ -8,7 +8,8 @@
    case "$(brcm2708_board_name)" in
    rpi-b |\
    rpi-cm |\
-    rpi-zero)
+    rpi-zero |\
+    rpi-0-w)
        status_led="led0"
        ;;
    rpi-b-plus |\
--- a/target/linux/brcm2708/base-files/lib/brcm2708.sh
+++ b/target/linux/brcm2708/base-files/lib/brcm2708.sh
@@ -21,6 +21,9 @@
    "Raspberry Pi Zero Rev"*)
        board_name="rpi-zero"
        ;;
+    "Raspberry Pi Zero W Rev"*)
+        board_name="rpi-0-w"
+        ;;
    "Raspberry Pi 2 Model B Rev"*)
        board_name="rpi-2-b"
        ;;
--- a/target/linux/brcm2708/image/Makefile
+++ b/target/linux/brcm2708/image/Makefile
@@ -68,7 +68,7 @@
### BCM2708/BCM2835 ###
ifeq ($(SUBTARGET),bcm2708)
   # Raspberry Pi Models B/B+/CM
-  $(eval $(call bcm27xx,RaspberryPi,rpi,bcm2708-rpi-b bcm2708-rpi-b-plus bcm2708-rpi-cm))
+  $(eval $(call bcm27xx,RaspberryPi,rpi,bcm2708-rpi-b bcm2708-rpi-b-plus bcm2708-rpi-cm bcm2708-rpi-0-w))
endif

### BCM2709/BCM2836 ###
--- /dev/null
+++ b/target/linux/brcm2708/patches-4.4/0391-BCM270X_DT-Add-bcm2708-rpi-0-w.dts.patch
@@ -0,0 +1,213 @@
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -3,6 +3,7 @@
+ dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b.dtb
+ dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b-plus.dtb
+ dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-cm.dtb
++dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-0-w.dtb
+ dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-cm.dtb
+ dtb-$(CONFIG_ARCH_BCM2709) += bcm2709-rpi-2-b.dtb
+ dtb-$(CONFIG_ARCH_BCM2709) += bcm2710-rpi-3-b.dtb
+--- /dev/null
++++ b/arch/arm/boot/dts/bcm2708-rpi-0-w.dts
+@@ -0,0 +1,200 @@
++/dts-v1/;
++
++#include "bcm2708.dtsi"
++
++/ {
++    compatible = "brcm,bcm2708";
++    model = "Raspberry Pi Zero W";
++};
++
++&gpio {
++    sdhost_pins: sdhost_pins {
++        brcm,pins = <48 49 50 51 52 53>;
++        brcm,function = <4>; /* alt0 */
++    };
++
++    spi0_pins: spi0_pins {
++        brcm,pins = <9 10 11>;
++        brcm,function = <4>; /* alt0 */
++    };
++
++    spi0_cs_pins: spi0_cs_pins {
++        brcm,pins = <8 7>;
++        brcm,function = <1>; /* output */
++    };
++
++    i2c0_pins: i2c0 {
++        brcm,pins = <0 1>;
++        brcm,function = <4>;
++    };
++
++    i2c1_pins: i2c1 {
++        brcm,pins = <2 3>;
++        brcm,function = <4>;
++    };
++
++    i2s_pins: i2s {
++        brcm,pins = <18 19 20 21>;
++        brcm,function = <4>; /* alt0 */
++    };
++
++    sdio_pins: sdio_pins {
++        brcm,pins = <34 35 36 37 38 39>;
++        brcm,function = <7 7 7 7 7 7>; /* ALT3 = SD1 */
++        brcm,pull = <0 2 2 2 2 2>;
++    };
++
++    bt_pins: bt_pins {
++        brcm,pins = <43>;
++        brcm,function = <4>; /* alt0:GPCLK2 */
++        brcm,pull = <0>; /* none */
++    };
++
++    uart0_pins: uart0_pins {
++        brcm,pins = <30 31 32 33>;
++        brcm,function = <7>; /* alt3=UART0 */
++        brcm,pull = <2 0 0 2>; /* up none none up */
++    };
++
++    uart1_pins: uart1_pins {
++        brcm,pins;
++        brcm,function;
++        brcm,pull;
++    };
++
++    audio_pins: audio_pins {
++        brcm,pins = <>;
++        brcm,function = <>;
++    };
++};
++
++&sdhost {
++    pinctrl-names = "default";
++    pinctrl-0 = <&sdhost_pins>;
++    bus-width = <4>;
++    status = "okay";
++};
++
++&mmc {
++    pinctrl-names = "default";
++    pinctrl-0 = <&sdio_pins>;
++    non-removable;
++    bus-width = <4>;
++    status = "okay";
++};
++
++&fb {
++    status = "okay";
++};
++
++&uart0 {
++    pinctrl-names = "default";
++    pinctrl-0 = <&uart0_pins &bt_pins>;
++    status = "okay";
++};
++
++&uart1 {
++    pinctrl-names = "default";
++    pinctrl-0 = <&uart1_pins>;
++    status = "okay";
++};
++
++&spi0 {
++    pinctrl-names = "default";
++    pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
++    cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
++
++    spidev0: spidev@0{
++        compatible = "spidev";
++        reg = <0>;    /* CE0 */
++        #address-cells = <1>;
++        #size-cells = <0>;
++        spi-max-frequency = <500000>;
++    };
++
++    spidev1: spidev@1{
++        compatible = "spidev";
++        reg = <1>;    /* CE1 */
++        #address-cells = <1>;
++        #size-cells = <0>;
++        spi-max-frequency = <500000>;
++    };
++};
++
++&i2c0 {
++    pinctrl-names = "default";
++    pinctrl-0 = <&i2c0_pins>;
++    clock-frequency = <100000>;
++};
++
++&i2c1 {
++    pinctrl-names = "default";
++    pinctrl-0 = <&i2c1_pins>;
++    clock-frequency = <100000>;
++};
++
++&i2c2 {
++    clock-frequency = <100000>;
++};
++
++&i2s {
++    #sound-dai-cells = <0>;
++    pinctrl-names = "default";
++    pinctrl-0 = <&i2s_pins>;
++};
++
++&random {
++    status = "okay";
++};
++
++&leds {
++    act_led: act {
++        label = "led0";
++        linux,default-trigger = "mmc0";
++        gpios = <&gpio 47 0>;
++    };
++};
++
++&hdmi {
++    hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
++};
++
++&audio {
++    pinctrl-names = "default";
++    pinctrl-0 = <&audio_pins>;
++};
++
++/ {
++    chosen {
++        bootargs = "8250.nr_uarts=1";
++    };
++};
++
++/ {
++    __overrides__ {
++        uart0 = <&uart0>,"status";
++        uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
++        uart1 = <&uart1>,"status";
++        i2s = <&i2s>,"status";
++        spi = <&spi0>,"status";
++        i2c0 = <&i2c0>,"status";
++        i2c1 = <&i2c1>,"status";
++        i2c2_iknowwhatimdoing = <&i2c2>,"status";
++        i2c0_baudrate = <&i2c0>,"clock-frequency:0";
++        i2c1_baudrate = <&i2c1>,"clock-frequency:0";
++        i2c2_baudrate = <&i2c2>,"clock-frequency:0";
++        core_freq = <&clk_core>,"clock-frequency:0";
++
++        act_led_gpio = <&act_led>,"gpios:4";
++        act_led_activelow = <&act_led>,"gpios:8";
++        act_led_trigger = <&act_led>,"linux,default-trigger";
++
++        audio = <&audio>,"status";
++        watchdog = <&watchdog>,"status";
++        random = <&random>,"status";
++        sd_overclock = <&sdhost>,"brcm,overclock-50:0";
++        sd_force_pio = <&sdhost>,"brcm,force-pio?";
++        sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
++        sd_debug     = <&sdhost>,"brcm,debug";
++    };
++};
--- a/package/kernel/brcm2708-gpu-fw/Makefile
+++ b/package/kernel/brcm2708-gpu-fw/Makefile
@@ -1,5 +1,6 @@
#
# Copyright (C) 2012-2016 OpenWrt.org
+# Copyright (C) 2017 LEDE project
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@@ -8,8 +9,8 @@
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=brcm2708-gpu-fw
-PKG_VERSION:=2016-06-08
-PKG_RELEASE:=70143fe9d371cd6486a80d6765e93b5574212b64
+PKG_VERSION:=2017-03-03
+PKG_RELEASE:=78c4983379de0537f49a97fb37ceaaf42632b28c

PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)/rpi-firmware-$(PKG_RELEASE)

@@ -24,7 +25,7 @@
   FILE:=$(RPI_FIRMWARE_FILE)-LICENCE.broadcom
   URL:=$(RPI_FIRMWARE_URL)
   URL_FILE:=LICENCE.broadcom
-  MD5SUM:=4a4d169737c0786fb9482bb6d30401d1
+  HASH:=ba76edfc10a248166d965b8eaf320771c44f4f432d4fce2fd31fd272e7038add
endef
$(eval $(call Download,LICENCE_broadcom))

@@ -32,7 +33,7 @@
   FILE:=$(RPI_FIRMWARE_FILE)-bootcode.bin
   URL:=$(RPI_FIRMWARE_URL)
   URL_FILE:=bootcode.bin
-  MD5SUM:=5bbb5f25dfe16f2871d5defcc48ac9ff
+  HASH:=d990031baec20fe2cd5e24d9f3d6fc34891afdb128838d010d9a0249ae29ea6b
endef
$(eval $(call Download,bootcode_bin))

@@ -40,7 +41,7 @@
   FILE:=$(RPI_FIRMWARE_FILE)-fixup.dat
   URL:=$(RPI_FIRMWARE_URL)
   URL_FILE:=fixup.dat
-  MD5SUM:=c85a8a7fd6f1012dedb979d5a5350135
+  HASH:=38b69384f62bc7b64f17dcedc03c5582af6b4f8dfc25fe5904d4eb3181a3387b
endef
$(eval $(call Download,fixup_dat))

@@ -48,7 +49,7 @@
   FILE:=$(RPI_FIRMWARE_FILE)-fixup_cd.dat
   URL:=$(RPI_FIRMWARE_URL)
   URL_FILE:=fixup_cd.dat
-  MD5SUM:=1e6c0d6c576956282b498f255eb12d3b
+  HASH:=05c682ffcc74cd1356f1b9a32a7034763bfea94e5cb54eaaa2e69affc1cd33d7
endef
$(eval $(call Download,fixup_cd_dat))

@@ -56,7 +57,7 @@
   FILE:=$(RPI_FIRMWARE_FILE)-start.elf
   URL:=$(RPI_FIRMWARE_URL)
   URL_FILE:=start.elf
-  MD5SUM:=94f8e421d6e46e89a60aa001af63844e
+  HASH:=59b9d26b463a84f017fae186493bb54e642de6c7e0376b3cbe3375df6132edc0
endef
$(eval $(call Download,start_elf))

@@ -64,7 +65,7 @@
   FILE:=$(RPI_FIRMWARE_FILE)-start_cd.elf
   URL:=$(RPI_FIRMWARE_URL)
   URL_FILE:=start_cd.elf
-  MD5SUM:=0a9082c25af181cbf16338de2362d5d6
+  HASH:=fb9aea03eb6790062c100166444bf7d2b8a6cea605bd041f905fcacefacbbae2
endef
$(eval $(call Download,start_cd_elf))

--- a/package/base-files/files/etc/rc.local
+++ b/package/base-files/files/etc/rc.local
@@ -1,4 +1,13 @@
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

+model=`cat /proc/device-tree/model`
+case "$model" in
+"Raspberry Pi Zero W Rev"* |\
+"Raspberry Pi 3 Model B Rev"*)
+    /usr/bin/hciattach /dev/ttyAMA0 bcm43xx 3000000 flow -
+    ;;
+esac
+/usr/bin/hciconfig hci0 up
+
exit 0

Great work!  Any chance you could put the working binary image somewhere public?  I've not yet found the time to start looking into patching and compiling my own OpenWRT builds.

Hi, everyone

I had a mistake. I forgot to write information of a patch.
It's Bluetooth firmware "BCM43430A1.hcd" for Raspberry Pi Zero W.

I'd like you to download this firmware from there.

github.com/OpenELEC/misc-firmware/blob/master/firmware/brcm/BCM43430A1.hcd

And you copy the file to there.

feeds/packages/utils/bluez/files

And you apply the following patch.

--------

--- a/feeds/packages/utils/bluez/Makefile
+++ b/feeds/packages/utils/bluez/Makefile
@@ -151,8 +151,6 @@
     $(INSTALL_DATA) $(PKG_BUILD_DIR)/profiles/proximity/proximity.conf $(1)/etc/bluetooth/proximity.conf
     $(INSTALL_DIR) $(1)/etc/init.d
     $(INSTALL_BIN) ./files/bluetoothd.init $(1)/etc/init.d/bluetoothd
-    $(INSTALL_DIR) $(1)/lib/firmware/brcm
-    $(INSTALL_DATA) ./files/BCM43430A1.hcd $(1)/lib/firmware/brcm/BCM43430A1.hcd
endef

$(eval $(call BuildPackage,bluez-examples))

--------

And I give you good news.

Now I upload the OpenWrt sd image for Raspberry Pi Zero W on my google drive.

Please download the following sd image and try to use this.

drive.google.com/drive/u/0/folders/0B33rUryzqeYGRUprN05HcWlVcHc

Bye.

(Last edited by factory3s.com on 19 Mar 2017, 00:31)

Hi I have downloaded and installed the image into my RPi zw, but now I do not know what to do,

Can you please provide some help on the next steps?

One more question, this image includes luci?

Thanks in advance

(Last edited by abrescom on 27 Mar 2017, 04:16)

Hi , everyone

I uploaded new version, now!
The new version changed to enable wifi and uci on web.

How to use this:

1. Download the image file.
2. Extract the image file.
3. Write the image file to sd card.
4. Into sd card to Raspberry Pi Zero W.
5. Connect power cable.
6. Connect Wifi (SSID is OpenWrt without password)
7. Access to 192.168.1.1 with web browser.
8. Login root without password.
9. Change setting root password, wifi config, and more.
10. Done.

Good luck!

Hi, this is a nice build, could you please give an advice, how to get usb-ethernet dogle to work?

Does anyone knows if it is possible to setup the Pi ZW as client AND as access point?
I have been trying to do it as with other router i have, but it is not working

Once i set up the client connection the main wifi access gets dropped

IN my second attempt i tried to create the client connection, then the AP connection, after that i applied all the changes and the same happened

Hi, ikenny42

I'd like to answer your question.

The my build image can use to usb-ethernet dongle.
But ASIX AX88772 USB 2.0 Ethernet only!

If you would like to use that than you shuld add the "eth0" device by configuration.

Good ruck!

Hi, abrescom

I think the wifi module of RPi 0 W can't use to both (client and access point)
because this chip is single wifi channel.

If would you like to use dual channel than add other wifi dongle and you shuld build image yourself.

Good night!

factory3s.com wrote:

How to use this:

1. Download the image file.

I would reallt like to get OpenWRT working on my rpi zero w for my project but it seems that the file is not availble anymore. Can you make it available again?

Hi, nnagel
Can you try again to dowinload from this google drive with http or https.
drive.google.com/drive/u/0/folders/0B33rUryzqeYGRUprN05HcWlVcHc
I checked to download it.
No problem.
Good luck!

(Last edited by factory3s.com on 4 Apr 2017, 23:23)

It is working now. Yesterday i recieved a 404. Thx for the effort!

Do you think it is possible to get this to work with the attitude_adjustment version of OpenWRT?

Hi, nnagel

I'd like to answer your question.

I think the attitude adjustment version of OpenWRT able to do on the RPi 0 W.
because my patches are changing only kernel boot loader  and wifi, buletooth driver (firmware).
I don't change linux kernel.
If the RPi 0 can do with this version then the RPi 0 W also can do.
maybe. (^0^)

Let try build it with my patch for RPi 0 W!

Good luck!

Hi,

  Sorry, I do not know how to embed an image here, but my Pi Zero W is working as AP and client at the same time, but neet to use the same channel in both. Not using openwrt but plain raspbian. The output from

iw list

shows that it can... But with channels <= 1

Hi factory3s,

Thank you so much for your image.

It works with my Raspberry Pi Zero W very well!

z.

factory3s.com wrote:

Hi, everyone

Now I upload the OpenWrt sd image for Raspberry Pi Zero W on my google drive.

Please download the following sd image and try to use this.

drive.google.com/drive/u/0/folders/0B33rUryzqeYGRUprN05HcWlVcHc

Bye.

Hello guys. First of all I would like to thank factory3s.com for this guide since it really helped me boot openwrt in my rpi zero.

I'm just posting my patch file here so that it could be of help to anybody else that need this.

drive.google.com/file/d/0BzJbFEVTJmaZanY4bU1XSkMxRHc/view?usp=sharing
drive.google.com/file/d/0BzJbFEVTJmaZMmpTd29UTS1JV0U/view?usp=sharing
drive.google.com/file/d/0BzJbFEVTJmaZSXFMVDlEdDJKNUE/view?usp=sharing

Hi misterpy.
Thank you for build patch files and upload it on google drive.
Nice job !!.

The discussion might have continued from here.