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 12*a2ffb301SXianjun 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 14*a2ffb301SXianjun Jiao[[Quick start](#Quick-start)] 15*a2ffb301SXianjun Jiao[[Project document](doc/README.md)] 16*a2ffb301SXianjun Jiao[[Application notes](doc/app_notes/README.md)] 17*a2ffb301SXianjun Jiao[[Videos](#Videos)] 18*a2ffb301SXianjun Jiao[[Papers](#Papers)] 19*a2ffb301SXianjun Jiao[[maillist](https://lists.ugent.be/wws/subscribe/openwifi)] 20*a2ffb301SXianjun Jiao[[Cite openwifi project](#Cite-openwifi-project)] 212ee67178SXianjun Jiao 222c8fb6e0SJiao XianjunOpenwifi code has dual licenses. AGPLv3 is the opensource license. For non-opensource 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) 30*a2ffb301SXianjun Jiao- [802.11 packet injection and fuzzing](doc/app_notes/inject_80211.md) 31c5a6d829SJiao Xianjun- CSI (Channel State Information, freq offset, equalizer to computer) [[CSI notes](doc/app_notes/csi.md)] 32c5a6d829SJiao Xianjun- IQ capture (real-time AGC, RSSI, IQ sample to computer) [[IQ notes](doc/app_notes/iq.md)][[IQ notes for dual antenna](doc/app_notes/iq_2ant.md)] 33b73660adSXianjun Jiao- Configurable channel access priority parameters: 34b73660adSXianjun Jiao - duration of RTS/CTS, CTS-to-self 35b73660adSXianjun Jiao - SIFS/DIFS/xIFS/slot-time/CW/etc 36c5a6d829SJiao Xianjun- Time slicing based on MAC address (time gated/scheduled FPGA queues) 37b73660adSXianjun Jiao- Easy to change bandwidth and frequency: 38b73660adSXianjun Jiao - 2MHz for 802.11ah in sub-GHz 39b73660adSXianjun Jiao - 10MHz for 802.11p/vehicle in 5.9GHz 40*a2ffb301SXianjun Jiao- **802.11ax** under development 412ee67178SXianjun Jiao 42b73660adSXianjun Jiao**Performance (AP: openwifi at channel 44, client: TL-WDN4200 N900 USB Dongle):** 43b73660adSXianjun Jiao- AP --> client: 30.6Mbps(TCP), 38.8Mbps(UDP) 44b73660adSXianjun Jiao- client --> AP: 17.0Mbps(TCP), 21.5Mbps(UDP) 452ee67178SXianjun Jiao 46b73660adSXianjun Jiao**Supported SDR platforms:** (Check [Porting guide](#Porting-guide) for your new board if it isn't in the list) 472ee67178SXianjun Jiao 48*a2ffb301SXianjun Jiaoboard_name|board combination|status|SD card img|Vivado license 49*a2ffb301SXianjun Jiao-------|-------|----|----|----- 50*a2ffb301SXianjun Jiaozc706_fmcs2|Xilinx ZC706 dev board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-32bit.img.xz)|Need 51*a2ffb301SXianjun Jiaozed_fmcs2|Xilinx zed board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-32bit.img.xz)|**NO** need 52*a2ffb301SXianjun Jiaoadrv9364z7020|ADRV9364-Z7020 + ADRV1CRR-BOB|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-32bit.img.xz)|**NO** need 53*a2ffb301SXianjun Jiaoadrv9361z7035|ADRV9361-Z7035 + ADRV1CRR-BOB/FMC|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-32bit.img.xz)|Need 54*a2ffb301SXianjun Jiaozc702_fmcs2|Xilinx ZC702 dev board + FMCOMMS2/3/4|Done|[32bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-32bit.img.xz)|**NO** need 55*a2ffb301SXianjun Jiaozcu102_fmcs2|Xilinx ZCU102 dev board + FMCOMMS2/3/4|Done|[64bit img](https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-64bit.img.xz)|Need 56*a2ffb301SXianjun Jiaozcu102_9371|Xilinx ZCU102 dev board + ADRV9371|Future|Future|Need 579e696164SXianjun Jiao 58b73660adSXianjun Jiao- board_name is used to identify FPGA design in openwifi-hw/boards/ 59b73660adSXianjun 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. 602ee67178SXianjun Jiao 61b73660adSXianjun Jiao[[Quick start](#Quick-start)] 62b73660adSXianjun Jiao[[Basic operations](#Basic-operations)] 63b73660adSXianjun Jiao[[Update FPGA](#Update-FPGA)] 64b73660adSXianjun Jiao[[Update Driver](#Update-Driver)] 65b73660adSXianjun Jiao[[Update sdrctl](#Update-sdrctl)] 66b73660adSXianjun Jiao[[Easy Access and etc](#Easy-Access-and-etc)] 672ee67178SXianjun Jiao 68b73660adSXianjun Jiao[[Build openwifi Linux img from scratch](#Build-openwifi-Linux-img-from-scratch)] 69b73660adSXianjun Jiao[[Special note for 11b](#Special-note-for-11b)] 70b73660adSXianjun Jiao[[Porting guide](#Porting-guide)] 71d9e94a69SJiao Xianjun[[Project document](doc/README.md)] 7275890522SJiao Xianjun[[Application notes](doc/app_notes/README.md)] 732ee67178SXianjun Jiao 74b73660adSXianjun Jiao## Quick start 756e8c8cf8SJiao 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: 76b1dd94e3Sluz paz - Copy files in **openwifi/board_name** to the base directory of BOOT partition. 77b1dd94e3Sluz paz - Copy **openwifi/zynqmp-common/Image** (zcu102 board) or **openwifi/zynq-common/uImage** (other boards) to the base directory of BOOT partition 789d56afc0SJiao 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. 799d56afc0SJiao Xianjun- Login to the board from your PC (PC Ethernet should have IP 192.168.10.1) with password **openwifi**. 802ee67178SXianjun Jiao ``` 812ee67178SXianjun Jiao ssh [email protected] 822ee67178SXianjun Jiao ``` 839d56afc0SJiao Xianjun- On board, run openwifi AP and the on board webserver 849d56afc0SJiao Xianjun ``` 85*a2ffb301SXianjun Jiao ~/openwifi/fosdem-11ag.sh 869d56afc0SJiao Xianjun ``` 87b1dd94e3Sluz 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. 889d56afc0SJiao Xianjun - Note 1: If your device doesn't support 5GHz (ch44), please change the **hostapd-openwifi.conf** on board and re-run fosdem.sh. 899d56afc0SJiao 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) 909d56afc0SJiao Xianjun- To give the Wi-Fii client internet access, configure routing/NAT **on the PC**: 91b73660adSXianjun Jiao ``` 92b73660adSXianjun Jiao sudo sysctl -w net.ipv4.ip_forward=1 93*a2ffb301SXianjun Jiao sudo iptables -t nat -A POSTROUTING -o NICY -j MASQUERADE 942ee67178SXianjun Jiao sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX 95b73660adSXianjun Jiao ``` 96*a2ffb301SXianjun Jiao **ethX** is the PC NIC name connecting the board ethernet. **NICY** is the PC NIC name connecting internet (WiFi or another ethernet). 972ee67178SXianjun Jiao 98b73660adSXianjun Jiao If you want, uncommenting "net.ipv4.ip_forward=1" in /etc/sysctl.conf to make IP forwarding persistent on PC. 9922dd0cc4SXianjun 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)]. 100b73660adSXianjun Jiao 101b73660adSXianjun Jiao## Basic operations 102b73660adSXianjun 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. 103b73660adSXianjun Jiao- Bring up the openwifi NIC sdr0: 104b73660adSXianjun Jiao ``` 105635261bcSJiao Xianjun service network-manager stop 106b73660adSXianjun Jiao cd ~/openwifi && ./wgd.sh 107b73660adSXianjun Jiao ``` 108b73660adSXianjun Jiao- Use openwifi as client to connect other AP (Change wpa-connect.conf on board firstly): 109b73660adSXianjun Jiao ``` 1102ee67178SXianjun Jiao route del default gw 192.168.10.1 111b73660adSXianjun Jiao wpa_supplicant -i sdr0 -c wpa-connect.conf & 1122ee67178SXianjun Jiao dhclient sdr0 1132ee67178SXianjun Jiao ``` 114b73660adSXianjun Jiao- Use openwifi in ad-hoc mode: Please check **sdr-ad-hoc-up.sh** and **sdr-ad-hoc-join.sh**. 115b73660adSXianjun Jiao- Use openwifi in monitor mode: Please check **monitor_ch.sh**. 116b73660adSXianjun 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. 117b73660adSXianjun Jiao- **sdrctl** is a dedicated tool to access openwifi driver/FPGA, please check doc directory for more information. 118b73660adSXianjun Jiao 119b73660adSXianjun Jiao## Update FPGA 120b73660adSXianjun Jiao 121b1dd94e3Sluz 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. 122b73660adSXianjun Jiao 12389ac92c2SJiao Xianjun- Install Vivado/SDK 2018.3 (If you don't need to generate new FPGA bitstream, WebPack version without license is enough) 124b73660adSXianjun Jiao- Setup environment variables (use absolute path): 1252ee67178SXianjun Jiao ``` 1262ee67178SXianjun Jiao export XILINX_DIR=your_Xilinx_directory 1272ee67178SXianjun Jiao export OPENWIFI_DIR=your_openwifi_directory 128b73660adSXianjun Jiao export BOARD_NAME=your_board_name 1292ee67178SXianjun Jiao ``` 130b73660adSXianjun Jiao- Get the latest FPGA bitstream from openwifi-hw, generate BOOT.BIN and transfer it on board via ssh channel: 1312ee67178SXianjun Jiao ``` 132b73660adSXianjun Jiao $OPENWIFI_DIR/user_space/get_fpga.sh $OPENWIFI_DIR 133febc5adfSXianjun Jiao 134febc5adfSXianjun Jiao For Zynq 7000: 135b73660adSXianjun Jiao $OPENWIFI_DIR/user_space/boot_bin_gen.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME 136febc5adfSXianjun Jiao 137febc5adfSXianjun Jiao For Zynq MPSoC (like zcu102 board): 138febc5adfSXianjun Jiao $OPENWIFI_DIR/user_space/boot_bin_gen_zynqmp.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME 139febc5adfSXianjun Jiao 140b73660adSXianjun Jiao scp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME/output_boot_bin/BOOT.BIN [email protected]: 1412ee67178SXianjun Jiao ``` 142b73660adSXianjun Jiao- On board: Put the BOOT.BIN into the BOOT partition. 1432ee67178SXianjun Jiao ``` 144b73660adSXianjun Jiao mount /dev/mmcblk0p1 /mnt 145b73660adSXianjun Jiao cp ~/BOOT.BIN /mnt 146b73660adSXianjun Jiao umount /mnt 14789e3e0fbSXianjun Jiao ``` 148b73660adSXianjun Jiao **Power cycle** the board to load new FPGA bitstream. 1492ee67178SXianjun Jiao 150b73660adSXianjun Jiao## Update Driver 1512ee67178SXianjun Jiao 152b1dd94e3Sluz pazSince the pre-built SD card image might not have the latest bug-fixes/updates, it is recommended to update the driver on board. 153b73660adSXianjun Jiao- Prepare Analog Devices Linux kernel source code (only need to run once): 1542ee67178SXianjun Jiao ``` 155febc5adfSXianjun Jiao $OPENWIFI_DIR/user_space/prepare_kernel.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT 156febc5adfSXianjun Jiao (For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64) 1572ee67178SXianjun Jiao ``` 158b73660adSXianjun Jiao- Compile the latest openwifi driver 1592ee67178SXianjun Jiao ``` 160febc5adfSXianjun Jiao $OPENWIFI_DIR/driver/make_all.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT 161febc5adfSXianjun Jiao (For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64) 1622ee67178SXianjun Jiao ``` 163b73660adSXianjun Jiao- Copy the driver files to the board via ssh channel 1642ee67178SXianjun Jiao ``` 165b73660adSXianjun Jiao scp `find $OPENWIFI_DIR/driver/ -name \*.ko` [email protected]:openwifi/ 166b73660adSXianjun Jiao ``` 167b73660adSXianjun Jiao Now you can use **wgd.sh** on board to load the new openwifi driver. 1689e8d5e4aSJiao Xianjun 169b73660adSXianjun Jiao## Update sdrctl 170b73660adSXianjun Jiao- Copy the sdrctl source files to the board via ssh channel 171b73660adSXianjun Jiao ``` 17234a68b64SJiao Xianjun scp `find $OPENWIFI_DIR/user_space/sdrctl_src/ -name \*` [email protected]:openwifi/sdrctl_src/ 173b73660adSXianjun Jiao ``` 174b73660adSXianjun Jiao- Compile the sdrctl **on board**: 175b73660adSXianjun Jiao ``` 176b73660adSXianjun Jiao cd ~/openwifi/sdrctl_src/ && make && cp sdrctl ../ && cd .. 177b73660adSXianjun Jiao ``` 178b73660adSXianjun Jiao## Easy Access and etc 1799e8d5e4aSJiao Xianjun 180b73660adSXianjun Jiao- FPGA and driver on board update scripts 181b73660adSXianjun 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. 182b73660adSXianjun Jiao - On board: 183b73660adSXianjun Jiao ``` 184b73660adSXianjun Jiao ./sdcard_boot_update.sh $BOARD_NAME 1859e8d5e4aSJiao Xianjun (Above command downloads uImage, BOOT.BIN and devicetree.dtb, then copy them into boot partition. Remember to power cycle) 1869e8d5e4aSJiao Xianjun ./wgd.sh remote 1879e8d5e4aSJiao Xianjun (Above command downloads driver files, and brings up sdr0) 188b73660adSXianjun Jiao ``` 189b73660adSXianjun Jiao- Access the board disk/rootfs like a disk: 190b73660adSXianjun Jiao - On PC: "File manager --> Connect to Server...", input: sftp://[email protected]/root 191b73660adSXianjun Jiao - Input password "openwifi" 1929e8d5e4aSJiao Xianjun 193b73660adSXianjun Jiao## Build openwifi Linux img from scratch 19496b42376STotalCaesar659- 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. 195b73660adSXianjun 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): 1962ee67178SXianjun Jiao ``` 197b73660adSXianjun Jiao export SDCARD_DIR=sdcard_mount_point 198b73660adSXianjun Jiao export XILINX_DIR=your_Xilinx_directory 199b73660adSXianjun Jiao export OPENWIFI_DIR=your_openwifi_directory 200b73660adSXianjun Jiao export BOARD_NAME=your_board_name 201b73660adSXianjun Jiao ``` 202b73660adSXianjun Jiao- Run script to update SD card: 203b73660adSXianjun Jiao ``` 204b73660adSXianjun Jiao $OPENWIFI_DIR/user_space/update_sdcard.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME $SDCARD_DIR 205b73660adSXianjun Jiao ``` 2069d56afc0SJiao Xianjun- Config your board to SD card boot mode (check the board manual). Insert the SD card to the board. Power on. 2079d56afc0SJiao Xianjun- Login to the board from your PC (PC Ethernet should have IP 192.168.10.1) with one time password **analog**. 2089d56afc0SJiao Xianjun ``` 2099d56afc0SJiao Xianjun ssh [email protected] 2109d56afc0SJiao Xianjun ``` 2119d56afc0SJiao Xianjun- Setup routing/NAT **on the PC** for your board -- this internet connection is **important** for post installation/config. 2129d56afc0SJiao Xianjun ``` 2139d56afc0SJiao Xianjun sudo sysctl -w net.ipv4.ip_forward=1 214*a2ffb301SXianjun Jiao sudo iptables -t nat -A POSTROUTING -o NICY -j MASQUERADE 2159d56afc0SJiao Xianjun sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX 2169d56afc0SJiao Xianjun ``` 217*a2ffb301SXianjun Jiao **ethX** is the PC NIC name connecting the board ethernet. **NICY** is the PC NIC name connecting internet (WiFi or another ethernet). 2189d56afc0SJiao Xianjun 2199d56afc0SJiao Xianjun If you want, uncommenting "net.ipv4.ip_forward=1" in /etc/sysctl.conf to make IP forwarding persistent on PC. 2209d56afc0SJiao Xianjun- Run **one time** script on board to complete post installation/config (After this, password becomes **openwifi**) 2219d56afc0SJiao Xianjun ``` 2229d56afc0SJiao Xianjun cd ~/openwifi && ./post_config.sh 2239d56afc0SJiao Xianjun ``` 2249d56afc0SJiao Xianjun- Now you can start from [Quick start](#Quick-start) (Skip the image download and burn step) 2252ee67178SXianjun Jiao 226b73660adSXianjun Jiao## Special note for 11b 227e17fdc17Smmehari 228e17fdc17SmmehariOpenwifi 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. 229e17fdc17Smmehari 230e17fdc17SmmehariAs a solution to this problem, openwifi can be fully controlled only if communicating with APs/clients instantiated using hostapd/wpa_supplicant userspace programs respectively. 231e17fdc17Smmehari 232e17fdc17SmmehariFor 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. 233e17fdc17Smmehari 234e17fdc17SmmehariOn 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. 235e17fdc17Smmehari``` 236b1633ad3SJiao Xianjunsudo apt-get install libssl1.0-dev 237b73660adSXianjun Jiao$OPENWIFI_DIR/user_space/build_wpa_supplicant_wo11b.sh $OPENWIFI_DIR 238e17fdc17Smmehari``` 239b73660adSXianjun Jiao## Porting guide 240e17fdc17Smmehari 241fbcc0b46SJiao 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). 242b73660adSXianjun Jiao- Open the fmcomms2 + zc706 reference design at hdl/projects/fmcomms2/zc706 (Please read Analog Devices help) 243b73660adSXianjun Jiao- Open the openwifi design zc706_fmcs2 at openwifi-hw/boards/zc706_fmcs2 (Please read openwifi-hw repository) 244b73660adSXianjun Jiao- "Open Block Design", you will see the differences between openwifi and the reference design. Both in "diagram" and in "Address Editor". 245b1dd94e3Sluz 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). 246b73660adSXianjun 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. 247b73660adSXianjun 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. 248b73660adSXianjun Jiao 24991e80ec1SJiao Xianjun## Videos 25091e80ec1SJiao Xianjun 2516dbcee39SJiao Xianjun- Demo [[youtube](https://youtu.be/NpjEaszd5u4)], [[link for CHN user](https://www.zhihu.com/zvideo/1280659393378041856)] 2526dbcee39SJiao Xianjun- FOSDEM2020 [[youtube](https://youtu.be/Mq48cGthk7M)], [[link for CHN user](https://www.zhihu.com/zvideo/1280673506397425664)] 2536dbcee39SJiao Xianjun- Low latency for gaming and introduction [[youtube](https://youtu.be/Notn9X482LI)], [[link for CHN user](https://www.zhihu.com/zvideo/1273823153371385856)] 2546dbcee39SJiao Xianjun- CSI (Channel State Information) [[twitter](https://twitter.com/i/status/1314207380561780738)], [[link for CHN user](https://www.zhihu.com/zvideo/1297662571618148352)] 2556dbcee39SJiao 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)] 25691e80ec1SJiao Xianjun 25791e80ec1SJiao Xianjun## Papers 25891e80ec1SJiao Xianjun 25922dd0cc4SXianjun Jiao- [openwifi: a free and open-source IEEE802.11 SDR implementation on SoC](https://www.orca-project.eu/wp-content/uploads/sites/4/2020/03/openwifi-vtc-antwerp-PID1249076.pdf) 260a58209b3SJiao Xianjun- [csi murder](https://ans.unibs.it/projects/csi-murder/) 26124f84886SJiao Xianjun- [IEEE 802.11 CSI randomization to preserve location privacy: An empirical evaluation in different scenarios](https://www.sciencedirect.com/science/article/abs/pii/S138912862100102X) 26291e80ec1SJiao Xianjun 26391e80ec1SJiao XianjunOpenwifi was born in [ORCA project](https://www.orca-project.eu/) (EU's Horizon2020 programme under agreement number 732174). 26491e80ec1SJiao Xianjun 265b73660adSXianjun Jiao## Cite openwifi project 26644dff4bdSJiao Xianjun 26744dff4bdSJiao XianjunAny use of openwifi project which results in a publication should include a citation via (bibtex example): 26844dff4bdSJiao Xianjun``` 26944dff4bdSJiao Xianjun@electronic{openwifigithub, 27044dff4bdSJiao Xianjun author = {Xianjun, Jiao and Wei, Liu and Michael, Mehari}, 27144dff4bdSJiao Xianjun title = {open-source IEEE802.11/Wi-Fi baseband chip/FPGA design}, 27244dff4bdSJiao Xianjun url = {https://github.com/open-sdr/openwifi}, 27344dff4bdSJiao Xianjun year = {2019}, 27444dff4bdSJiao Xianjun} 27544dff4bdSJiao Xianjun``` 2766aae74b0SLina Ceballos 2776aae74b0SLina Ceballos## License 2786aae74b0SLina Ceballos 2796aae74b0SLina 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. 280