xref: /openwifi/README.md (revision b49db4c59a0f2511208515d878ea297c204de6d1)
1a6085186SLina Ceballos<!--
23b4065baSJiao XianjunAuthor: Xianjun jiao, Michael Mehari, Wei Liu
3f1d0fee3SJiao XianjunSPDX-FileCopyrightText: 2019 UGent
4a6085186SLina CeballosSPDX-License-Identifier: AGPL-3.0-or-later
5a6085186SLina Ceballos-->
6a6085186SLina Ceballos
70df4ca4dSimoerman# openwifi
82ee67178SXianjun Jiao<img src="./openwifi-arch.jpg" width="900">
92ee67178SXianjun Jiao
1038f76c01SJiao Xianjun**openwifi:** Linux mac80211 compatible full-stack IEEE802.11/Wi-Fi design based on SDR (Software Defined Radio).
112ee67178SXianjun Jiao
12a2ffb301SXianjun JiaoThis repository includes Linux driver and software. [openwifi-hw](https://github.com/open-sdr/openwifi-hw) repository has the FPGA design. It is **YOUR RESPONSIBILITY** to follow your **LOCAL SPECTRUM REGULATION** or use **CABLE** to avoid potential interference over the air.
13525f977bSJiao Xianjun
14a2ffb301SXianjun Jiao[[Quick start](#Quick-start)]
15a2ffb301SXianjun Jiao[[Project document](doc/README.md)]
16a2ffb301SXianjun Jiao[[Application notes](doc/app_notes/README.md)]
17a2ffb301SXianjun Jiao[[Videos](#Videos)]
18*b49db4c5SXianjun Jiao[[Publications](doc/publications.md)]
19a2ffb301SXianjun Jiao[[maillist](https://lists.ugent.be/wws/subscribe/openwifi)]
20a2ffb301SXianjun Jiao[[Cite openwifi project](#Cite-openwifi-project)]
212ee67178SXianjun Jiao
22f46d6eb1SXianjun JiaoOpenwifi code has dual licenses. AGPLv3 is the opensource license. For non-opensource and advanced feature license, please contact [email protected]. Openwifi project also leverages some 3rd party modules. It is user's duty to check and follow licenses of those modules according to the purpose/usage. You can find [an example explanation from Analog Devices](https://github.com/analogdevicesinc/hdl/blob/master/LICENSE) for this compound license conditions. [[How to contribute]](https://github.com/open-sdr/openwifi/blob/master/CONTRIBUTING.md).
232ee67178SXianjun Jiao
242ee67178SXianjun Jiao**Features:**
252ee67178SXianjun Jiao
2694c4a85fSJiao Xianjun- 802.11a/g/n [[IEEE 802.11n (Wi-Fi 4)](doc/app_notes/ieee80211n.md)]
27b73660adSXianjun Jiao- 20MHz bandwidth; 70 MHz to 6 GHz frequency range
28b73660adSXianjun Jiao- Mode tested: Ad-hoc; Station; AP, Monitor
29b73660adSXianjun Jiao- DCF (CSMA/CA) low MAC layer in FPGA (10us SIFS is achieved)
30a2ffb301SXianjun Jiao- [802.11 packet injection and fuzzing](doc/app_notes/inject_80211.md)
31d14d06e5SXianjun Jiao- [CSI](doc/app_notes/csi.md): Channel State Information, freq offset, equalizer to computer
32*b49db4c5SXianjun Jiao- [CSI fuzzer](doc/app_notes/csi_fuzzer.md): Create artificial channel response in WiFi transmitter
33d14d06e5SXianjun Jiao- [[IQ capture](doc/app_notes/iq.md)]: real-time AGC, RSSI, IQ sample to computer. [[Dual antenna version](doc/app_notes/iq_2ant.md)]
34b73660adSXianjun Jiao- Configurable channel access priority parameters:
35b73660adSXianjun Jiao  - duration of RTS/CTS, CTS-to-self
36b73660adSXianjun Jiao  - SIFS/DIFS/xIFS/slot-time/CW/etc
37c5a6d829SJiao Xianjun- Time slicing based on MAC address (time gated/scheduled FPGA queues)
38b73660adSXianjun Jiao- Easy to change bandwidth and frequency:
39b73660adSXianjun Jiao  - 2MHz for 802.11ah in sub-GHz
40b73660adSXianjun Jiao  - 10MHz for 802.11p/vehicle in 5.9GHz
41a2ffb301SXianjun Jiao- **802.11ax** under development
422ee67178SXianjun Jiao
43b73660adSXianjun Jiao**Performance (AP: openwifi at channel 44, client: TL-WDN4200 N900 USB Dongle):**
44b73660adSXianjun Jiao- AP --> client: 30.6Mbps(TCP), 38.8Mbps(UDP)
45b73660adSXianjun Jiao- client --> AP: 17.0Mbps(TCP), 21.5Mbps(UDP)
462ee67178SXianjun Jiao
47b73660adSXianjun Jiao**Supported SDR platforms:** (Check [Porting guide](#Porting-guide) for your new board if it isn't in the list)
482ee67178SXianjun Jiao
49a2ffb301SXianjun Jiaoboard_name|board combination|status|SD card img|Vivado license
50a2ffb301SXianjun Jiao-------|-------|----|----|-----
5109d381a0SJiao Xianjunzc706_fmcs2|Xilinx ZC706 dev board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-1-32bit.img.xz)|Need
5209d381a0SJiao Xianjunzed_fmcs2|Xilinx zed board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-1-32bit.img.xz)|**NO** need
5309d381a0SJiao Xianjunadrv9364z7020|ADRV9364-Z7020 + ADRV1CRR-BOB|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-1-32bit.img.xz)|**NO** need
5409d381a0SJiao Xianjunadrv9361z7035|ADRV9361-Z7035 + ADRV1CRR-BOB/FMC|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-1-32bit.img.xz)|Need
5509d381a0SJiao Xianjunzc702_fmcs2|Xilinx ZC702 dev board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-1-32bit.img.xz)|**NO** need
5609d381a0SJiao Xianjunzcu102_fmcs2|Xilinx ZCU102 dev board + FMCOMMS2/3/4|Done|[64bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-1-64bit.img.xz)|Need
57a2ffb301SXianjun Jiaozcu102_9371|Xilinx ZCU102 dev board + ADRV9371|Future|Future|Need
589e696164SXianjun Jiao
59b73660adSXianjun Jiao- board_name is used to identify FPGA design in openwifi-hw/boards/
60b73660adSXianjun Jiao- Don't have any boards? Or you like JTAG boot instead of SD card? Check our test bed [w-iLab.t](https://doc.ilabt.imec.be/ilabt/wilab/tutorials/openwifi.html) tutorial.
612ee67178SXianjun Jiao
62b73660adSXianjun Jiao[[Quick start](#Quick-start)]
63b73660adSXianjun Jiao[[Basic operations](#Basic-operations)]
64b73660adSXianjun Jiao[[Update FPGA](#Update-FPGA)]
65b73660adSXianjun Jiao[[Update Driver](#Update-Driver)]
66b73660adSXianjun Jiao[[Update sdrctl](#Update-sdrctl)]
67b73660adSXianjun Jiao[[Easy Access and etc](#Easy-Access-and-etc)]
682ee67178SXianjun Jiao
69b73660adSXianjun Jiao[[Build openwifi Linux img from scratch](#Build-openwifi-Linux-img-from-scratch)]
70b73660adSXianjun Jiao[[Special note for 11b](#Special-note-for-11b)]
71b73660adSXianjun Jiao[[Porting guide](#Porting-guide)]
72d9e94a69SJiao Xianjun[[Project document](doc/README.md)]
7375890522SJiao Xianjun[[Application notes](doc/app_notes/README.md)]
742ee67178SXianjun Jiao
75b73660adSXianjun Jiao## Quick start
766e8c8cf8SJiao Xianjun- Burn openwifi board specific img file (from the table) into a SD card ("Open With Disk Image Writer". Or "dd" command after unzip). The SD card has two partitions: BOOT and rootfs. You need to config the **correct files in the BOOT partition** according to the **board you have** by operation on your computer:
77b1dd94e3Sluz paz  - Copy files in **openwifi/board_name** to the base directory of BOOT partition.
78b1dd94e3Sluz paz  - Copy **openwifi/zynqmp-common/Image** (zcu102 board) or **openwifi/zynq-common/uImage** (other boards) to the base directory of BOOT partition
799d56afc0SJiao Xianjun- Connect two antennas to RXA/TXA ports. Config the board to SD card boot mode (check the board manual). Insert the SD card to the board. Power on.
809d56afc0SJiao Xianjun- Login to the board from your PC (PC Ethernet should have IP 192.168.10.1) with password **openwifi**.
812ee67178SXianjun Jiao  ```
822ee67178SXianjun Jiao  ssh [email protected]
832ee67178SXianjun Jiao  ```
849d56afc0SJiao Xianjun- On board, run openwifi AP and the on board webserver
859d56afc0SJiao Xianjun  ```
86a2ffb301SXianjun Jiao  ~/openwifi/fosdem-11ag.sh
879d56afc0SJiao Xianjun  ```
88b1dd94e3Sluz paz- After you see the "openwifi" SSID on your device (Phone/Laptop/etc), connect it. Browser to 192.168.13.1 on your device, you should see the webpage hosted by the webserver on board.
899d56afc0SJiao Xianjun  - Note 1: If your device doesn't support 5GHz (ch44), please change the **hostapd-openwifi.conf** on board and re-run fosdem.sh.
909d56afc0SJiao Xianjun  - Note 2: After ~2 hours, the Viterbi decoder will halt (Xilinx Evaluation License). Just power cycle the board if it happens. (If output of "./sdrctl dev sdr0 get reg rx 20" is always the same, it means the decoder halts)
919d56afc0SJiao Xianjun- To give the Wi-Fii client internet access, configure routing/NAT **on the PC**:
92b73660adSXianjun Jiao  ```
93b73660adSXianjun Jiao  sudo sysctl -w net.ipv4.ip_forward=1
94a2ffb301SXianjun Jiao  sudo iptables -t nat -A POSTROUTING -o NICY -j MASQUERADE
952ee67178SXianjun Jiao  sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX
96b73660adSXianjun Jiao  ```
97a2ffb301SXianjun Jiao  **ethX** is the PC NIC name connecting the board ethernet. **NICY** is the PC NIC name connecting internet (WiFi or another ethernet).
982ee67178SXianjun Jiao
99b73660adSXianjun Jiao  If you want, uncommenting "net.ipv4.ip_forward=1" in /etc/sysctl.conf to make IP forwarding persistent on PC.
10022dd0cc4SXianjun Jiao- To monitor **real-time CSI (Chip State Information)**, such as timestamp, frequency offset, channel state, equalizer, please refer to [[CSI notes](doc/app_notes/csi.md)].
101b73660adSXianjun Jiao
102b73660adSXianjun Jiao## Basic operations
103b73660adSXianjun JiaoThe board actually is an Linux/Ubuntu computer which is running **hostapd** to offer Wi-Fi AP functionality over the Wi-Fi Network Interface (NIC). The NIC is implemented by openwifi-hw FPGA design. We use the term **"On board"** to indicate that the commands should be executed after ssh login to the board. **"On PC"** means the commands should run on PC.
104b73660adSXianjun Jiao- Bring up the openwifi NIC sdr0:
105b73660adSXianjun Jiao  ```
106635261bcSJiao Xianjun  service network-manager stop
107b73660adSXianjun Jiao  cd ~/openwifi && ./wgd.sh
108b73660adSXianjun Jiao  ```
109b73660adSXianjun Jiao- Use openwifi as client to connect other AP (Change wpa-connect.conf on board firstly):
110b73660adSXianjun Jiao  ```
1112ee67178SXianjun Jiao  route del default gw 192.168.10.1
112b73660adSXianjun Jiao  wpa_supplicant -i sdr0 -c wpa-connect.conf &
1132ee67178SXianjun Jiao  dhclient sdr0
1142ee67178SXianjun Jiao  ```
115b73660adSXianjun Jiao- Use openwifi in ad-hoc mode: Please check **sdr-ad-hoc-up.sh** and **sdr-ad-hoc-join.sh**.
116b73660adSXianjun Jiao- Use openwifi in monitor mode: Please check **monitor_ch.sh**.
117b73660adSXianjun Jiao- The Linux native Wi-Fi tools/Apps (iwconfig/ifconfig/iwlist/iw/hostapd/wpa_supplicant/etc) can run over openwifi NIC in the same way as commercial Wi-Fi chip.
118b73660adSXianjun Jiao- **sdrctl** is a dedicated tool to access openwifi driver/FPGA, please check doc directory for more information.
119b73660adSXianjun Jiao
120b73660adSXianjun Jiao## Update FPGA
121b73660adSXianjun Jiao
122b1dd94e3Sluz pazSince the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to update the fpga bitstream on board.
123b73660adSXianjun Jiao
12489ac92c2SJiao Xianjun- Install Vivado/SDK 2018.3 (If you don't need to generate new FPGA bitstream, WebPack version without license is enough)
125b73660adSXianjun Jiao- Setup environment variables (use absolute path):
1262ee67178SXianjun Jiao  ```
1272ee67178SXianjun Jiao  export XILINX_DIR=your_Xilinx_directory
1282ee67178SXianjun Jiao  export OPENWIFI_DIR=your_openwifi_directory
129b73660adSXianjun Jiao  export BOARD_NAME=your_board_name
1302ee67178SXianjun Jiao  ```
131b73660adSXianjun Jiao- Get the latest FPGA bitstream from openwifi-hw, generate BOOT.BIN and transfer it on board via ssh channel:
1322ee67178SXianjun Jiao  ```
133b73660adSXianjun Jiao  $OPENWIFI_DIR/user_space/get_fpga.sh $OPENWIFI_DIR
134febc5adfSXianjun Jiao
135febc5adfSXianjun Jiao  For Zynq 7000:
136b73660adSXianjun Jiao  $OPENWIFI_DIR/user_space/boot_bin_gen.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME
137febc5adfSXianjun Jiao
138febc5adfSXianjun Jiao  For Zynq MPSoC (like zcu102 board):
139febc5adfSXianjun Jiao  $OPENWIFI_DIR/user_space/boot_bin_gen_zynqmp.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME
140febc5adfSXianjun Jiao
141b73660adSXianjun Jiao  scp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME/output_boot_bin/BOOT.BIN [email protected]:
1422ee67178SXianjun Jiao  ```
143b73660adSXianjun Jiao- On board: Put the BOOT.BIN into the BOOT partition.
1442ee67178SXianjun Jiao  ```
145b73660adSXianjun Jiao  mount /dev/mmcblk0p1 /mnt
146b73660adSXianjun Jiao  cp ~/BOOT.BIN /mnt
147b73660adSXianjun Jiao  umount /mnt
14889e3e0fbSXianjun Jiao  ```
149b73660adSXianjun Jiao  **Power cycle** the board to load new FPGA bitstream.
1502ee67178SXianjun Jiao
151b73660adSXianjun Jiao## Update Driver
1522ee67178SXianjun Jiao
153b1dd94e3Sluz pazSince the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to update the driver on board.
154b73660adSXianjun Jiao- Prepare Analog Devices Linux kernel source code (only need to run once):
1552ee67178SXianjun Jiao  ```
156febc5adfSXianjun Jiao  $OPENWIFI_DIR/user_space/prepare_kernel.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT
157febc5adfSXianjun Jiao  (For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64)
1582ee67178SXianjun Jiao  ```
159f773d8deSJiao Xianjun  **Note**: In Ubuntu, gcc-10 might have issue ('yylloc' error), so use gcc-9 if you encounter error.
160b73660adSXianjun Jiao- Compile the latest openwifi driver
1612ee67178SXianjun Jiao  ```
162febc5adfSXianjun Jiao  $OPENWIFI_DIR/driver/make_all.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT
163febc5adfSXianjun Jiao  (For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64)
1642ee67178SXianjun Jiao  ```
165b73660adSXianjun Jiao- Copy the driver files to the board via ssh channel
1662ee67178SXianjun Jiao  ```
167b73660adSXianjun Jiao  scp `find $OPENWIFI_DIR/driver/ -name \*.ko` [email protected]:openwifi/
168b73660adSXianjun Jiao  ```
169b73660adSXianjun Jiao  Now you can use **wgd.sh** on board to load the new openwifi driver.
17019bec082SJiao Xianjun  **Note**: If you have symbol or version error while loadng the driver, it could be because the kernel in the SD card image is too old. In this case, you need to follow [[Build openwifi Linux img from scratch](#Build-openwifi-Linux-img-from-scratch)] to generate your new SD card image.
1719e8d5e4aSJiao Xianjun
172b73660adSXianjun Jiao## Update sdrctl
173b73660adSXianjun Jiao- Copy the sdrctl source files to the board via ssh channel
174b73660adSXianjun Jiao  ```
17534a68b64SJiao Xianjun  scp `find $OPENWIFI_DIR/user_space/sdrctl_src/ -name \*` [email protected]:openwifi/sdrctl_src/
176b73660adSXianjun Jiao  ```
177b73660adSXianjun Jiao- Compile the sdrctl **on board**:
178b73660adSXianjun Jiao  ```
179b73660adSXianjun Jiao  cd ~/openwifi/sdrctl_src/ && make && cp sdrctl ../ && cd ..
180b73660adSXianjun Jiao  ```
181b73660adSXianjun Jiao## Easy Access and etc
1829e8d5e4aSJiao Xianjun
183b73660adSXianjun Jiao- FPGA and driver on board update scripts
184b73660adSXianjun Jiao  - Setup [ftp server](https://help.ubuntu.com/lts/serverguide/ftp-server.html) on PC, allow anonymous and change ftp root directory to $OPENWIFI_DIR.
185b73660adSXianjun Jiao  - On board:
186b73660adSXianjun Jiao  ```
187b73660adSXianjun Jiao  ./sdcard_boot_update.sh $BOARD_NAME
1889e8d5e4aSJiao Xianjun  (Above command downloads uImage, BOOT.BIN and devicetree.dtb, then copy them into boot partition. Remember to power cycle)
1899e8d5e4aSJiao Xianjun  ./wgd.sh remote
1909e8d5e4aSJiao Xianjun  (Above command downloads driver files, and brings up sdr0)
191b73660adSXianjun Jiao  ```
192b73660adSXianjun Jiao- Access the board disk/rootfs like a disk:
193b73660adSXianjun Jiao   - On PC: "File manager --> Connect to Server...", input: sftp://[email protected]/root
194b73660adSXianjun Jiao   - Input password "openwifi"
1959e8d5e4aSJiao Xianjun
196b73660adSXianjun Jiao## Build openwifi Linux img from scratch
19796b42376STotalCaesar659- Download [2019_R1-2020_02_04.img.xz](https://swdownloads.analog.com/cse/2019_R1-2020_02_04.img.xz) from [Analog Devices Wiki](https://wiki.analog.com/resources/tools-software/linux-software/zynq_images). Burn it to a SD card.
198b73660adSXianjun Jiao- Insert the SD card to your Linux PC. Find out the mount point (that has two sub directories BOOT and rootfs), and setup environment variables (use absolute path):
1992ee67178SXianjun Jiao  ```
200b73660adSXianjun Jiao  export SDCARD_DIR=sdcard_mount_point
201b73660adSXianjun Jiao  export XILINX_DIR=your_Xilinx_directory
202b73660adSXianjun Jiao  export OPENWIFI_DIR=your_openwifi_directory
203b73660adSXianjun Jiao  export BOARD_NAME=your_board_name
204b73660adSXianjun Jiao  ```
205b73660adSXianjun Jiao- Run script to update SD card:
206b73660adSXianjun Jiao  ```
207b73660adSXianjun Jiao  $OPENWIFI_DIR/user_space/update_sdcard.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME $SDCARD_DIR
208b73660adSXianjun Jiao  ```
2099d56afc0SJiao Xianjun- Config your board to SD card boot mode (check the board manual). Insert the SD card to the board. Power on.
2109d56afc0SJiao Xianjun- Login to the board from your PC (PC Ethernet should have IP 192.168.10.1) with one time password **analog**.
2119d56afc0SJiao Xianjun  ```
2129d56afc0SJiao Xianjun  ssh [email protected]
2139d56afc0SJiao Xianjun  ```
2149d56afc0SJiao Xianjun- Setup routing/NAT **on the PC** for your board -- this internet connection is **important** for post installation/config.
2159d56afc0SJiao Xianjun  ```
2169d56afc0SJiao Xianjun  sudo sysctl -w net.ipv4.ip_forward=1
217a2ffb301SXianjun Jiao  sudo iptables -t nat -A POSTROUTING -o NICY -j MASQUERADE
2189d56afc0SJiao Xianjun  sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX
2199d56afc0SJiao Xianjun  ```
220a2ffb301SXianjun Jiao  **ethX** is the PC NIC name connecting the board ethernet. **NICY** is the PC NIC name connecting internet (WiFi or another ethernet).
2219d56afc0SJiao Xianjun
2229d56afc0SJiao Xianjun  If you want, uncommenting "net.ipv4.ip_forward=1" in /etc/sysctl.conf to make IP forwarding persistent on PC.
2239d56afc0SJiao Xianjun- Run **one time** script on board to complete post installation/config (After this, password becomes **openwifi**)
2249d56afc0SJiao Xianjun  ```
2259d56afc0SJiao Xianjun  cd ~/openwifi && ./post_config.sh
2269d56afc0SJiao Xianjun  ```
2279d56afc0SJiao Xianjun- Now you can start from [Quick start](#Quick-start) (Skip the image download and burn step)
2282ee67178SXianjun Jiao
229b73660adSXianjun Jiao## Special note for 11b
230e17fdc17Smmehari
231e17fdc17SmmehariOpenwifi only applies OFDM as its modulation scheme and as a result, it is not backward compatible with 802.11b clients or modes of operation. This is usually the case during beacon transmission, connection establishment, and robust communication.
232e17fdc17Smmehari
233e17fdc17SmmehariAs a solution to this problem, openwifi can be fully controlled only if communicating with APs/clients instantiated using hostapd/wpa_supplicant userspace programs respectively.
234e17fdc17Smmehari
235e17fdc17SmmehariFor hostapd program, 802.11b rates can be suppressed using configuration commands (i.e. supported_rates, basic_rates) and an example configuration file is provided (i.e. hostapd-openwifi.conf). One small caveat to this one comes from fullMAC Wi-Fi cards as they must implement the *NL80211_TXRATE_LEGACY* NetLink handler at the device driver level.
236e17fdc17Smmehari
237e17fdc17SmmehariOn the other hand, the wpa_supplicant program on the client side (commercial Wi-Fi dongle/board) cannot suppress 802.11b rates out of the box in 2.4GHz band, so there will be an issue when connecting openwifi (OFDM only). A patched wpa_supplicant should be used at the client side.
238e17fdc17Smmehari```
239b1633ad3SJiao Xianjunsudo apt-get install libssl1.0-dev
240b73660adSXianjun Jiao$OPENWIFI_DIR/user_space/build_wpa_supplicant_wo11b.sh $OPENWIFI_DIR
241e17fdc17Smmehari```
242b73660adSXianjun Jiao## Porting guide
243e17fdc17Smmehari
244fbcc0b46SJiao XianjunThis section explains the porting work by showing the differences between openwifi and Analog Devices reference design. openwifi is based on 2019_R1 of [HDL Reference Designs](https://github.com/analogdevicesinc/hdl).
245b73660adSXianjun Jiao- Open the fmcomms2 + zc706 reference design at hdl/projects/fmcomms2/zc706 (Please read Analog Devices help)
246b73660adSXianjun Jiao- Open the openwifi design zc706_fmcs2 at openwifi-hw/boards/zc706_fmcs2 (Please read openwifi-hw repository)
247b73660adSXianjun Jiao- "Open Block Design", you will see the differences between openwifi and the reference design. Both in "diagram" and in "Address Editor".
248b1dd94e3Sluz paz- The address/interrupts of FPGA blocks hooked to the ARM bus should be put/aligned to the devicetree file openwifi/kernel_boot/boards/zc706_fmcs2/devicetree.dts. Linux will parse the devicetree.dtb when booting to know information of attached device (FPGA blocks in our case).
249b73660adSXianjun Jiao- We use dtc command to get devicetree.dts converted from devicetree.dtb in [Analog Devices Linux image](https://wiki.analog.com/resources/tools-software/linux-software/zynq_images), then do modification according to what we have added/modified to the reference design.
250b73660adSXianjun Jiao- Please learn the script in [[Build openwifi Linux img from scratch](#Build-openwifi-Linux-img-from-scratch)] to understand how we generate devicetree.dtb, BOOT.BIN and Linux kernel uImage and put them together to build the full SD card image.
251b73660adSXianjun Jiao
25291e80ec1SJiao Xianjun## Videos
25391e80ec1SJiao Xianjun
2546dbcee39SJiao Xianjun- Demo [[youtube](https://youtu.be/NpjEaszd5u4)], [[link for CHN user](https://www.zhihu.com/zvideo/1280659393378041856)]
2556dbcee39SJiao Xianjun- FOSDEM2020 [[youtube](https://youtu.be/Mq48cGthk7M)], [[link for CHN user](https://www.zhihu.com/zvideo/1280673506397425664)]
2566dbcee39SJiao Xianjun- Low latency for gaming and introduction [[youtube](https://youtu.be/Notn9X482LI)], [[link for CHN user](https://www.zhihu.com/zvideo/1273823153371385856)]
2576dbcee39SJiao Xianjun- CSI (Channel State Information) [[twitter](https://twitter.com/i/status/1314207380561780738)], [[link for CHN user](https://www.zhihu.com/zvideo/1297662571618148352)]
2586dbcee39SJiao Xianjun- FOSDEM2021 [[Flash back](https://twitter.com/jxjputaoshu/status/1358462741703491584?s=20)], [[link for CHN user](https://www.zhihu.com/zvideo/1340748826311974912)]; [[Presentation](https://mirror.as35701.net/video.fosdem.org/2021/D.radio/fsr_openwifi_opensource_wifi_chip.webm)], [[link for CHN user](https://www.zhihu.com/zvideo/1345036055104360448)]
25991e80ec1SJiao Xianjun
260b73660adSXianjun Jiao## Cite openwifi project
26144dff4bdSJiao Xianjun
26244dff4bdSJiao XianjunAny use of openwifi project which results in a publication should include a citation via (bibtex example):
26344dff4bdSJiao Xianjun```
26444dff4bdSJiao Xianjun@electronic{openwifigithub,
26544dff4bdSJiao Xianjun            author = {Xianjun, Jiao and Wei, Liu and Michael, Mehari},
26644dff4bdSJiao Xianjun            title = {open-source IEEE802.11/Wi-Fi baseband chip/FPGA design},
26744dff4bdSJiao Xianjun            url = {https://github.com/open-sdr/openwifi},
26844dff4bdSJiao Xianjun            year = {2019},
26944dff4bdSJiao Xianjun}
27044dff4bdSJiao Xianjun```
2716aae74b0SLina Ceballos
2726aae74b0SLina Ceballos## License
2736aae74b0SLina Ceballos
2746aae74b0SLina CeballosThis project is available as open source under the terms of the AGPL 3.0 Or later. However, some elements are being licensed under GPL 2-0 or later and BSD 3 license . For accurate information, please check individual files.
275