# OpenIPC Wiki
[Table of Content](../README.md)

Adding a wifi driver to your firmware
---
Since most cameras have very little flash memory, OpenIPC firmware images don't contain many wifi drivers, as they can easily be 1.5MB+ per driver.
This means that in many cases, you will have to add the appropriate wifi driver to your firmware image.

### Step 1: preparing the build environment
You will need a Linux environment. First download the OpenIPC firmware repository:

```
git clone https://github.com/OpenIPC/firmware.git openipc-firmware
cd openipc-firmware
```

Install packages required for building:

```
sudo make deps
```

### Step 2: determine the driver package
Here are some of the most common wifi driver packages:
```
# AIC:
BR2_PACKAGE_AIC8800_OPENIPC

# Altobeam:
BR2_PACKAGE_ATBM60XX
BR2_PACKAGE_ATBM6441

# iComm:
BR2_PACKAGE_SSV6X5X_OPENIPC

# MediaTek:
BR2_PACKAGE_MT7601U_OPENIPC

# SigmaStar:
BR2_PACKAGE_SSW101B

# Realtek:
BR2_PACKAGE_RTL8188EUS_OPENIPC
BR2_PACKAGE_RTL8188FU_OPENIPC
BR2_PACKAGE_RTL8189ES_OPENIPC
BR2_PACKAGE_RTL8189FS_OPENIPC
BR2_PACKAGE_RTL8192EU_OPENIPC
BR2_PACKAGE_RTL8733BU_OPENIPC
BR2_PACKAGE_RTL8812AU_OPENIPC
```

Take note of the `BR2_PACKAGE` variable for the driver you need.

### Step 3: add BR2_PACKAGE variable to your firmware configuration
The firmware configuration files are ordered per chipset in the `br-ext-chip-*`directories. Navigate to the directory for the chipset you are building for, then navigate to the `/configs/` directory.

Example: you have a hisilicon chipset:

`cd br-ext-chip-hisilicon/configs/`

Inside you will see a number of `_defconfig` files. Open the file for your desired chip and firmware flavor in a text editor.
Add the appropriate `BR2_PACKAGE` variable to this file, adding `=y` to the end of the variable. 

Example: you want to add the RTL8188EUS driver:

`BR2_PACKAGE_RTL8188EUS_OPENIPC=y`

### Step 4: Build your firmware
Return to the root directory of the openipc firmware directory `openipc-firmware/`.
Run `make` and select the configuration you have edited in the previous step.

Alternatively, you can run `make BOARD=<your_config>`, where `<your_config>` is the name of the config file you have just edited, minus the `_defconfig`

Example: you want to build `ultimate` for `hi3516ev200`:

`make BOARD=hi3516ev200_ultimate`

When the build is complete, you will find the output in the `output/images/` directory:

```
./rootfs.hi3516ev200.cpio
./openipc.hi3516ev200-nor-ultimate.tgz
./rootfs.squashfs.hi3516ev200
./rootfs.hi3516ev200.tar
./uImage.hi3516ev200
```

You can now use `rootfs.squashfs.*` and `uImage.*` with [sysupgrade](./sysupgrade.md) or your preferred update mechanism.

*For additional wifi configuration, see [wireless settings](./wireless-settings.md).*

*For more information about building OpenIPC from source, see [building](./building.md).*