Salah satu kendala yang biasa ditemukan dalam dunia opensource adalah masalah driver yang tidak di support secara default oleh vendor pembuat hardware. Contohnya saja, beberapa waktu yang lalu saat menginstall PC-BSD 9.2 pada lenovo Ideapad Z480 yang menggunakan hardware WIFI dengan chipset broadcom 4313 saya mengalami kendala mengaktifkan koneksi WIFI saya.
Untungnya, dunia opensource adalah dunia berbagi dimana setiap orang bisa berkontribusi menyelesaikan masalah yang di alami oleh komunitasnya. Pada beberapa kasus malah orang berlomba-lomba mencari solusi yang cepat dan tepat. Itulah indahnya dunia opensource.
Demikian pula dengan masalah WIFI yang saya ceritakan diatas, secara default memang tidak ada driver khusus untuk sistem FreeBSD 9.2 (PC-BSD 9.2) 64 Bit saya, untungnya bukan saya saja yang mengalami hal tersebut. Dengan mengkombinasikan solusi dari beberapa forum akhirnya WIFI broadcom 4313 bisa digunakan dengan baik.
Berikut langkah-langkah instalasi driver WIFI chipset broadcom 4313 pada sistem PC-BSD 9.2 64 bit.
Pertama, cek terlebih dahulu jenis chipset/hardware yang ada pada laptop/pc yang a kita gunakan. Caranya dengan menjalankan perintah lspci :
[budhi@pcbsd-1860] /usr/home/budhi/ndisulator-stable9# lspci -v | grep Wireless 04:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)
Atau dengan menggunakan perintah pciconf :
[budhi@pcbsd-1860] /usr/home/budhi/ndisulator-stable9# pciconf -lv | grep Wireless device = 'BCM4313 802.11b/g/n Wireless LAN Controller'
Kedua, setelah diketahui jenis chipset/hardware yang digunakan oleh pc/laptop kita langkah selanjutnya adalah dengan menginstall ndisulator. Ndisulator (NDISwrapper) adalah software gratisan yang bisa digunakan untuk “mengkonversi” driver network versi Windows XP menjadi driver yang bisa digunakan sistem linux/BSD dengan catatan memiliki sistem “instruction set architecture” yang di support oleh windows yakni IA-32 dan x86_64.
Sebelum menginstall ndisulator, pastikan terlebih dahulu anda memiliki kernel source tree FreeBSD, cek dengan perintah ls :
[budhi@pcbsd-1860] ~# ls /usr/src .svn Makefile.inc1 bin games libexec share COPYRIGHT Makefile.mips cddl gnu release sys LOCKS ObsoleteFiles.inc contrib include rescue tools MAINTAINERS README crypto kerberos5 sbin usr.bin Makefile UPDATING etc lib secure usr.sbin
Jika tidak, install terlebih dahulu kernel source tree-nya. Kernel source tree dibutuhkan pada saat proses instalasi ndisulator. Download ndisulator dari situs ini, saya download yang versi zipnya. Extract, kemudian masuk ke direktori hasil extract lalu jalankan perintah berikut untuk menginstallnya :
[budhi@pcbsd-1860] ~# cd /home/budhi/ndisulator-stable9;make;make build;make install
Kemudian pastikan juga bahwa libiconv sudah terinstall :
[budhi@pcbsd-1860] ~# cd /usr/ports/converters/libiconv;make;make install
Ketiga, download driver WIFI versi Windows XP untuk chipset yang sama. Misalnya driver untuk laptop saya (Ideapad Z480) menggunakan chipset broadcom 4313 bisa di download lewat link ini berikut :
[budhi@pcbsd-1860] ~#fetch http://gugus69.free.fr/freebsd/Broadcom_BCM43xx_5.100.235.19_win5x.tgz; tar -xvzf Boadcom_BCM43xx_5.100.235.19_win5x.tgz
Masuk ke directori hasil extractnya, berikut list file hasil extractnya :
[budhi@pcbsd-1860] ~# cd /home/budhi/BCM43xx [budhi@pcbsd-1860] /home/budhi/BCM43xx# ls Notes.txt bcmwl5.inf bcmwlcoi64.dll SilentInstall_Driver_Only_XP.bat bcmwl5.sys setup.exe bcm43xx.cat bcmwl564.sys setup.iss bcm43xx64.cat bcmwlcoi.dll
Sebelum melanjutkan ke proses konversi driver dengan menggunakan ndisulator, ada baiknya melakukan backup terlebih dahulu folder “include” yang ada di /usr/src/sys/x86 dan /usr/src/sys/amd64. Pada beberapa tutorial yang saya temukan langkah ini tidak disebut, sepengalaman saya pada saat proses pembuatan driver tersebut saya mendapatkan error yang menyatakan bahwa folder include diatas tidak ditemukan meskipun pada awalnya ada. Jadi untuk kehati2an agar tidak repot-repot harus ambil kernel source tree lagi, sebaiknya backup saja folder include tersebut.
[budhi@pcbsd-1860] ~# cp -Rp /usr/src/sys/amd64/include /usr/src/sys/amd64/include.bak [budhi@pcbsd-1860] ~# cp -Rp /usr/src/sys/x86/include /usr/src/sys/x86/include.bak
Keempat, jalankan perintah ndisgen :
ndisgen
Kemudian akan masuk ke menu ndisgen, masukan angka 3 untuk melakukan konversi driver :
================================================================== ------------------ Windows(r) driver converter ------------------- ================================================================== This script is designed to guide you through the process of converting a Windows(r) binary driver module and .INF specification file into a FreeBSD ELF kernel module for use with the NDIS compatibility system. The following options are available: 1] Learn about the NDIS compatibility system 2] Convert individual firmware files 3] Convert driver 4] Exit Enter your selection here and press return: 3
masukan nama driver .inf nya (bcmwl5.inf) , kemudian tekan enter :
================================================================== ------------------ Windows(r) driver converter ------------------- ================================================================== INF file validation A .INF file is most often provided as an ASCII file, however files with multilanguage support are provided in Unicode format. Please type in the path to your .INF file now. > bcmwl5.inf This .INF file appears to be Unicode. Trying to convert to ASCII... Done. Press return to continue...
Jika ada peringatan dibawahnya, abaikan saja kemudian tekan enter.
Masukan file .sys yang di minta (bcmwl564.sys atau bcmwl5.sys jika menggunakan sistem 32 bit / i386) :
================================================================== ------------------ Windows(r) driver converter ------------------- ================================================================== Driver file validation Now you need to specify the name of the Windows(r) driver .SYS file for your device. Note that if you are running FreeBSD/amd64, then you must provide a driver that has been compiled for the 64-bit Windows(r) platform. If a 64-bit driver is not available for your device, you must install FreeBSD/i386 and use the 32-bit driver instead. Please type in the path to the Windows(r) driver .SYS file now. > bcmwl564.sys This .SYS file appears to be in Windows(r) PE format. Press return to continue...
Abaikan peringatan dibawahnya, tekan enter
================================================================== ------------------ Windows(r) driver converter ------------------- ================================================================== Driver file conversion The script will now try to convert the .INF and .SYS files using the ndiscvt(1) utility. This utility can handle most .INF files; however, occasionally it can fail to parse some files due to subtle syntax issues: the .INF syntax is very complex, and the Windows(r) parser will sometimes allow files with small syntax errors to be processed correctly which ndiscvt(1) will not. If the conversion fails, you may have to edit the .INF file by hand to remove the offending lines. Press enter to try converting the files now:
Tekan enter, apabila berhasil akan muncul informasi bahwa proses konversi berhasil.
Conversion was successful. Press enter to continue...
Selanjutnya proses pembuatan module driver
================================================================== ------------------ Windows(r) driver converter ------------------- ================================================================== Kernel module generation The script will now try to generate the kernel driver module. This is the last step. Once this module is generated, you should be able to load it just like any other FreeBSD driver module. Press enter to compile the stub module and generate the driver module now:
Tekan enter. Copy kan module driver yang sudah terbentuk biasanya dalam bentuk file .ko ke /boot/modules :
[budhi@pcbsd-1860] /home/budhi/BCM43xx#cp bcmwl564_sys.ko /boot/modules
Selanjutnya tambahkan pada rc.conf baris berikut
kld_list='bcmwl564_sys' #kld_list='bcmwl5_sys' kalau bukan 64 bit wlans_ndis0="wlan0" wpa_supplicant_enable=”YES” ifconfig_wlan0="WPA SYNCDHCP”
pada file /boot/loader.conf tambahkan baris berikut :
wlan_ccmp_load=”YES” wlan_tkip_load=”YES”
Terakhir, tambahkan informasi ssid pada /etc/wpa_supplicant.conf
ap_scan=1 network={ ssid=”nama ssid” psk=”passphrase wpa” }
Restart FreeBSD anda, kemudian periksa dengan perintah ifconfig. Jika driver terinstall dengan baik, maka akan terdeteksi wlan0 sebagai salah satu interfacenya. Demikian langkah-langkah instalasi driver wifi pada FreeBSD dengan menggunakan driver Windows XP menggunakan ndisgen