Hey everyone,
It is possible to use an external Wi-Fi adapter with an android phone to run aircrack-ng, however I've had a lot of difficulties doing so. Here is a tutorial to make it easier for you.
The theory
Running the aircrack-ng suite itself is not much of a problem, as android is pretty much like ubuntu. The most difficult part of running aircrack is that the wifi chipsets of most phones do not support "monitor mode". This mode is required to capture any information from the air, not just the ones for your computer, and is therefore necessary for aircrack (airmon-ng). First of all, you should Google if your phone's wifi chipset supports this mode. If it does, find out how. If it doesn't, you can follow this guide and use a usb wifi stick.
Android is linux, and uses a linux kernel. The easiest way to get the driver for our WiFi adapter to work is to rebuild the android kernel with the driver built-in. We can then flash the new kernel to the phone, and copy the firmware binary. This tutorial uses CyanogenMod, because it is a well documented, open-source ROM. With some adjustments you can use the same method on other ROMs. If you do not have experience building a linux kernel, it is best to stick to this guide and use CyanogenMod.
What you'll need:
- Android phone
- Computer with Ubuntu (or other linux distribution)
- USB OTG Adapter (micro usb to usb female)
- Wireless USB Adapter
- Time and patience
I am using my Samsung Galaxy S4 GT-i9505 and an Eminent EM4454 Wireless USB adapter using the rt73 driver, but I am sure this will work with other devices.
A. Install your ROM and aircrack-ng, on your phone...
1) ...install Cyanogenmod. Don't delete the .zip download after installation.
2) ...install "Complete Linux Installer" from Google Play and download and unpack Ubuntu in /sdcard/ubuntu/ubuntu.img as stated in the app.
3) ...install the aircrack-ng suite in the chrooted ubuntu. On ubuntu 12.04, this cannot be done using apt-get:
sudo apt-get install build-essential libssl-dev nano
wget http://download.aircrack-ng.org/aircrack-ng-1.1.tar.gz
tar -xzvf aircrack-ng-1.1.tar.gz
cd aircrack-ng-1.1
nano common.mak
Then find CFLAGS ?= -g -W -Wall -Werror -O3 and remove -Werror.
make
sudo make install
B. Rebuild the kernel, in a terminal on linux on your computer...
1) ...install adb and fastboot
sudo apt-get install adb fastboot
2) Enable USB-debugging on your phone, connect to your computer and test the connection on linux on your computer:
adb get-state
3) Find the GitHub page for the cyanogenmod kernel for your device. You can find this page on cyanogenmod.org. Now download the kernel source and extract it into a folder.
4) Change working directory into the kernel
cd pathtothekernel
5) See if there is a .config file. In a CyanogenMod kernel, there probably isn't. Type:
nano .config
If you see an empty screen, we need to get your devices current configuration:
adb pull /proc/config.gz config.gz
zcat config.gz > .config
rm config.gz
4) Make the necessary changes in the configuration file to have your USB wireless driver built in. To do so:
make menuconfig
Use the enter key to expand an item in the menu, and the space bar to mark a module. Make sure you mark the necessary modules with a *, not an 'M', so they will be built-in. Most wireless drivers have the mac80211 driver as a dependency. Make sure you select that one with an asterix (*), too.
For example, for my rt73 based adapter, I did:
Networking Support > Wireless > [*] ... (mac80211)
Device Drivers > Network > Wireless LAB > [*] Ralink Drivers > [*] rt73usb
5) Make some changes to fight errors:
Still in menuconfig, make the following changes:
Kernel Hacking > (1024) Block? size > 1032
Now to tell gcc to build ignoring warnings edit the Makefile
nano Makefile
Now go down a few pages and add the line:
KCONFIG_CFLAGS += -w
6) The normal gcc C compiler cannot be used as it will build for your computers processor. We need to build for ARM-processors, called cross-compiling. To make the cross-compiling work you need the arm-eabi- toolchain.
cd ~/Downloads
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
The will download the ~120Mb toolchain.
7) Tell the Makefile where the toolchain is
cd pathtothekernel
export PATH=$PATH:~/Downloads/arm-eabi-4.6/bin
export CROSS_COMPILE=arm-eabi-
export ARCH=arm
8) Then build the kernel. It you get errors, don't be scared and Google them. One cause of weird errors is not having enough memory; add a swapfile and try again. The building of the kernel will take quite some time:
make
C. Flash the new kernel to the phone
1) When the build is finished, it has saved "zImage". This image is our kernel. For the sake of simplicity, let's copy it to the desktop but rename it so that later commands won't override it:
cp arch/arm/boot/zImage ~/Desktop/new-zImage
2) For flashing, we need to pack this zImage into a boot.img. Get the boot.img out of the ROM you now run on your phone. For example, the CyangonMod.zip you had to flash to your phone to install it, contains a boot.img. Most flashable .zip files have a boot.img in them. Copy this boot.img to your desktop, too.
3) Extract the boot.img
sudo apt-get install abootimg
abootimg -x boot.img
this will place 3 new files on your desktop.
4) Delete the extracted zImage and boot.img, as we want our self-compiled kernel.
rm zImage
rm boot.img
5) Edit the configuration file and remove the line with kernel-size, as our new kernel's size will be slightly larger.
nano bootimg.cfg
Remove the line beginning with bootsize:, which is probably the first line
5) Use abootimg to repack new-zImage and the 2 extracted files.
abootimg --create boot.img -f bootimg.cfg -k new-zImage -r initrd.img
6) Backup your phone in case anything goes wrong, and flash the boot.img. For many phones, this can be done using fastboot on linux. On my Galaxy, I had to use Mobile Odin: http://forum.xda-developers.com/showthread.php?t=1347899
D. Copy the firmware and run, on your phone...
1) ... start the chrooted ubuntu
2) ... insert your USB OTG and in that the Wireless USB Adapter
3) ... run airmon-ng and make sure your device is listed.
airmon-ng
If not, check that your kernel is flashed (under Settings > About Device > kernel it should say [email protected]) and that the correct drivers were selected with an asterix * (built-in, y) in make menuconfig. If it is listed, continue.
4) We now have the correct driver, but the firmware is likely missing. Download the .bin firmware that belongs to your driver. In my case, I had to download the rt73 driver from aircrack-ng website, and copy the .bin firmware file. Install ES File Manager or another root explorer, choose Root Explorer and then mount /system as Read/Write so that you can edit the contents. Now copy the firmware file to /system/etc/firmware/.
5) Run airmon-ng and check which interface your Wireless USB Adapter is.
airmon-ng
6) Start the monitor mode
airmon-ng start wlan1
Replace wlan1 with the interface name of the Wireless USB Adapter
7) If everything went right, it should say that monitor mode is enabled. You can now use
airodump-ng mon0
replacing mon0 with the monitor interface. If you get the error SIOCFLAGS: No such file or directory, the firmware file (e.g. *.bin) is not placed in the right directory (/system/etc/firmware and maybe a path extension, check the firmware README) or has the wrong name.
Congratulations, you have now got a phone running aircrack-ng!
I got this to work on my stock Samsung TouchWiz ROM by making a few adjustments:
- Get the kernel from Samsung: http://opensource.samsung.com/
- Change the lines in the .config file of the kernel below ## Samsung Rooting ... from =y to =n using nano
- To get boot.img, download the ...tar.md5 firmware matching your current firmware from http://www.sammobile.com/firmware/, rename .tar.md5 to .tar, and extract the boot.img. You cannot use mkbootimg here, only abootimg, as this boot.img has a special ramdisk address!
Thank you helped heaps. had been compiling as modules and couldnt insmod.
s4 i9505 stock rom - aircrack - tp-link tl-wn722n
Jesus, that was awesome. Couldn't find a better tutorial on the net!
Thanks again.
Btw, could you please upload the Galaxy S4 Cyanogen rom with the kernel?
I would appreciate alot.
Hey i have Htc desire C! I did the instal "bcmon.apk" but when I run the program turns out this message "cant run as root,'su' failed... why ??? please help me !
argentux said:
Hey everyone,
It is possible to use an external Wi-Fi adapter with an android phone to run aircrack-ng, however I've had a lot of difficulties doing so. Here is a tutorial to make it easier for you.
The theory
Running the aircrack-ng suite itself is not much of a problem, as android is pretty much like ubuntu. The most difficult part of running aircrack is that the wifi chipsets of most phones do not support "monitor mode". This mode is required to capture any information from the air, not just the ones for your computer, and is therefore necessary for aircrack (airmon-ng). First of all, you should Google if your phone's wifi chipset supports this mode. If it does, find out how. If it doesn't, you can follow this guide and use a usb wifi stick.
Android is linux, and uses a linux kernel. The easiest way to get the driver for our WiFi adapter to work is to rebuild the android kernel with the driver built-in. We can then flash the new kernel to the phone, and copy the firmware binary. This tutorial uses CyanogenMod, because it is a well documented, open-source ROM. With some adjustments you can use the same method on other ROMs. If you do not have experience building a linux kernel, it is best to stick to this guide and use CyanogenMod.
What you'll need:
- Android phone
- Computer with Ubuntu (or other linux distribution)
- USB OTG Adapter (micro usb to usb female)
- Wireless USB Adapter
- Time and patience
I am using my Samsung Galaxy S4 GT-i9505 and an Eminent EM4454 Wireless USB adapter using the rt73 driver, but I am sure this will work with other devices.
A. Install your ROM and aircrack-ng, on your phone...
1) ...install Cyanogenmod. Don't delete the .zip download after installation.
2) ...install "Complete Linux Installer" from Google Play and download and unpack Ubuntu in /sdcard/ubuntu/ubuntu.img as stated in the app.
3) ...install the aircrack-ng suite in the chrooted ubuntu. On ubuntu 12.04, this cannot be done using apt-get:
sudo apt-get install build-essential libssl-dev nano
wget http://download.aircrack-ng.org/aircrack-ng-1.1.tar.gz
tar -xzvf aircrack-ng-1.1.tar.gz
cd aircrack-ng-1.1
nano common.mak
Then find CFLAGS ?= -g -W -Wall -Werror -O3 and remove -Werror.
make
sudo make install
B. Rebuild the kernel, in a terminal on linux on your computer...
1) ...install adb and fastboot
sudo apt-get install adb fastboot
2) Enable USB-debugging on your phone, connect to your computer and test the connection on linux on your computer:
adb get-state
3) Find the GitHub page for the cyanogenmod kernel for your device. You can find this page on cyanogenmod.org. Now download the kernel source and extract it into a folder.
4) Change working directory into the kernel
cd pathtothekernel
5) See if there is a .config file. In a CyanogenMod kernel, there probably isn't. Type:
nano .config
If you see an empty screen, we need to get your devices current configuration:
adb pull /proc/config.gz config.gz
zcat config.gz > .config
rm config.gz
4) Make the necessary changes in the configuration file to have your USB wireless driver built in. To do so:
make menuconfig
Use the enter key to expand an item in the menu, and the space bar to mark a module. Make sure you mark the necessary modules with a *, not an 'M', so they will be built-in. Most wireless drivers have the mac80211 driver as a dependency. Make sure you select that one with an asterix (*), too.
For example, for my rt73 based adapter, I did:
Networking Support > Wireless > [*] ... (mac80211)
Device Drivers > Network > Wireless LAB > [*] Ralink Drivers > [*] rt73usb
5) Make some changes to fight errors:
Still in menuconfig, make the following changes:
Kernel Hacking > (1024) Block? size > 1032
Now to tell gcc to build ignoring warnings edit the Makefile
nano Makefile
Now go down a few pages and add the line:
KCONFIG_CFLAGS += -w
6) The normal gcc C compiler cannot be used as it will build for your computers processor. We need to build for ARM-processors, called cross-compiling. To make the cross-compiling work you need the arm-eabi- toolchain.
cd ~/Downloads
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
The will download the ~120Mb toolchain.
7) Tell the Makefile where the toolchain is
cd pathtothekernel
export PATH=$PATH:~/Downloads/arm-eabi-4.6/bin
export CROSS_COMPILE=arm-eabi-
export ARCH=arm
8) Then build the kernel. It you get errors, don't be scared and Google them. One cause of weird errors is not having enough memory; add a swapfile and try again. The building of the kernel will take quite some time:
make
C. Flash the new kernel to the phone
1) When the build is finished, it has saved "zImage". This image is our kernel. For the sake of simplicity, let's copy it to the desktop but rename it so that later commands won't override it:
cp arch/arm/boot/zImage ~/Desktop/new-zImage
2) For flashing, we need to pack this zImage into a boot.img. Get the boot.img out of the ROM you now run on your phone. For example, the CyangonMod.zip you had to flash to your phone to install it, contains a boot.img. Most flashable .zip files have a boot.img in them. Copy this boot.img to your desktop, too.
3) Extract the boot.img
sudo apt-get install abootimg
abootimg -x boot.img
this will place 3 new files on your desktop.
4) Delete the extracted zImage and boot.img, as we want our self-compiled kernel.
rm zImage
rm boot.img
5) Edit the configuration file and remove the line with kernel-size, as our new kernel's size will be slightly larger.
nano bootimg.cfg
Remove the line beginning with bootsize:, which is probably the first line
5) Use abootimg to repack new-zImage and the 2 extracted files.
abootimg --create boot.img -f bootimg.cfg -k new-zImage -r initrd.img
6) Backup your phone in case anything goes wrong, and flash the boot.img. For many phones, this can be done using fastboot on linux. On my Galaxy, I had to use Mobile Odin: http://forum.xda-developers.com/showthread.php?t=1347899
D. Copy the firmware and run, on your phone...
1) ... start the chrooted ubuntu
2) ... insert your USB OTG and in that the Wireless USB Adapter
3) ... run airmon-ng and make sure your device is listed.
airmon-ng
If not, check that your kernel is flashed (under Settings > About Device > kernel it should say [email protected]) and that the correct drivers were selected with an asterix * (built-in, y) in make menuconfig. If it is listed, continue.
4) We now have the correct driver, but the firmware is likely missing. Download the .bin firmware that belongs to your driver. In my case, I had to download the rt73 driver from aircrack-ng website, and copy the .bin firmware file. Install ES File Manager or another root explorer, choose Root Explorer and then mount /system as Read/Write so that you can edit the contents. Now copy the firmware file to /system/etc/firmware/.
5) Run airmon-ng and check which interface your Wireless USB Adapter is.
airmon-ng
6) Start the monitor mode
airmon-ng start wlan1
Replace wlan1 with the interface name of the Wireless USB Adapter
7) If everything went right, it should say that monitor mode is enabled. You can now use
airodump-ng mon0
replacing mon0 with the monitor interface. If you get the error SIOCFLAGS: No such file or directory, the firmware file (e.g. *.bin) is not placed in the right directory (/system/etc/firmware and maybe a path extension, check the firmware README) or has the wrong name.
Congratulations, you have now got a phone running aircrack-ng!
I got this to work on my stock Samsung TouchWiz ROM by making a few adjustments:
- Get the kernel from Samsung: http://opensource.samsung.com/
- Change the lines in the .config file of the kernel below ## Samsung Rooting ... from =y to =n using nano
- To get boot.img, download the ...tar.md5 firmware matching your current firmware from http://www.sammobile.com/firmware/, rename .tar.md5 to .tar, and extract the boot.img. You cannot use mkbootimg here, only abootimg, as this boot.img has a special ramdisk address!
Click to expand...
Click to collapse
Thats insane that it can actually run aircrack, especially considering i had a hard time just running linux on it.
yoshihat said:
Thats insane that it can actually run aircrack, especially considering i had a hard time just running linux on it.
Click to expand...
Click to collapse
How is that so? For me it wasn't complicated at all.
I did everything and got everything ready, up to
Code:
make menuconfig
And it gives me error 2. And then it says something about there not being a variable.
:/
Please help?
I am actually having a time trying to make it work. I did everything right, then I sucessfully build the boot.img, but when I flash it through Mobile Odin as "Kernel" and the Cyanogenmod loads, the screen is all screwed up, like the SystemUI has crashed + interference signal effect, its unusable. Then I restore it through TWRP back to normal.
Do you know what may be the problem? Im using the 10.1.3 JFLTEXX CyanogenMod Build. (For the i9505.)
Edit: Nevermind, was compiling the M build against the Stable one. Obvious error. It works 100% now, thanks!
GruberEXN said:
I am actually having a time trying to make it work. I did everything right, then I sucessfully build the boot.img, but when I flash it through Mobile Odin as "Kernel" and the Cyanogenmod loads, the screen is all screwed up, like the SystemUI has crashed + interference signal effect, its unusable. Then I restore it through TWRP back to normal.
Do you know what may be the problem? Im using the 10.1.3 JFLTEXX CyanogenMod Build. (For the i9505.)
Edit: Nevermind, was compiling the M build against the Stable one. Obvious error. It works 100% now, thanks!
Click to expand...
Click to collapse
Could you please send the edited working kernel with the modules/drivers built in that you installed? (Please, like a link or something?)
androidiphonehacker said:
Could you please send the edited working kernel with the modules/drivers built in that you installed? (Please, like a link or something?)
Click to expand...
Click to collapse
Ok! I built the RTL8187/8187b driver, do you have that one? (Alfa wireless chipsets often use those ones.)
Edited for unknown reasons!
I have a TP-Link TL-wn722n USB wireless adapter. I'm kind of a noob at kernel building, and I'm not sure what driver/module it uses. Soooo... Could you build it for me please please pleaaaase? xD
I have (that USB adapter), and the newest CyanogenMod ROM for model SGS-i9505.
Tell you what: I'll pay you if you build it.
Sent from my GT-I9505 using Tapatalk
androidiphonehacker said:
I have a TP-Link TL-wn722n USB wireless adapter. I'm kind of a noob at kernel building, and I'm not sure what driver/module it uses. Soooo... Could you build it for me please please pleaaaase? xD
I have (that USB adapter), and the newest CyanogenMod ROM for model SGS-i9505.
Tell you what: I'll pay you if you build it.
Sent from my GT-I9505 using Tapatalk
Click to expand...
Click to collapse
Add'd your skype.
Building a kernel requires some troubleshooting, so prepare your device with TWRP or any recovery menu. (A nandroid backup would be nice too.)
And I don't mind a donation, although I don't want a payment. Maybe a cheap game would do the work after one day of troubleshooting your new kernel
Hello everyone....
i have a few little update form my side...
But first, my englisch is not the best, i'm sorry for it ^^
1. The is Important for every one how work at the end with aircrack... Then you need to get to patch the mac80211 data (channel-negative-one-maxim.patch and mac80211.compat08082009.wl_frag+ack_v1.patch from aircrack), otherwise you get at the end a fixed channel -1 problem in aircrack.... of which more later
Here now My litte Upgrade to build a another Kernel because CM10... For this session I use the Kernel form Yank555.lu on JB 4.1.2!
First you need to get the Kernel von GitHub. "github /yank555-lu/SGS3-JB/archive/Update11.zip"
After you extracte the kernel into your Kernel-Folder go in it.
cd ../path/to/kernel
########## 1. You need to edit the Makefile to beware for compile errors. ##########
nano Makefile
Search at the line 571:
-- KBUILD_CFLAGS += -fdiagnostics-show-option -Werror \
++ KBUILD_CFLAGS += -fdiagnostics-show-option \
Search at line 373:
-- -mcpu=cortex-a9 -mfpu=neon -mtune=cortex-a9 -fno-pic \
-- -munaligned-access
++ -mtune=cortex-a9
Now go to line 693:
++ #
++ # Edit by Mastaaa
++ #
++ KCONFIG_CFLAGS += -w
Save the file and Close it....
################ 2. Download and Patch the Wireless Patches. ################
For the negative-channel fix you need to get the Patches.
wget patches.aircrack-ng.org/mac80211.compat08082009.wl_frag+ack_v1.patch &&
wget patches.aircrack-ng.org/channel-negative-one-maxim.patch
Now patch it...
patch ./net/mac80211/tx.c mac80211.compat08082009.wl_frag+ack_v1.patch &&
patch ./net/wireless/chan.c channel-negative-one-maxim.patch
################### 3. make .config and edit menuconfig. ####################
Ceate a Basic .config File with:
make Yank555.lu_v3.x_series_defconfig
Now Edit the Menuconfig:
make menuconfig
Here the Basic edit's (i think) you get to need:
1. Edit the Kernel Info (to what you want...):
General setup --->
(...) Local version - append to kernel release (Hit Enter to edit this...)#
2. Turn On the mac80211 driver:
[*] Networking support ---->
-*- Wireless ---->
< > Generic IEEE 802.11 Networking Stack (Mark to <*>)
[ ] Enable mac80211 mesh networking (pre-802.11s) support (Mark to [ * ]
3, Mark the additional usb drivers:
Device Drivers ---->
.....[*] Network device support ---->
..........[*] Wireless LAN ---->
...............(Mark <m> or <*> waht you need.... Here a few examples
...............<*> Atmel at76c503/at76c505/at76c505a USB cards
...............<*> Realtek 8187 and 8187B USB support
...............<*> Atheros Wireless Cards ----->
...............<*> Ralink driver support ----->
....................<*> Ralink rt2500 (USB) support
....................<*> Ralink rt2501/rt73 (USB) support
....................<*> Ralink rt27xx/rt28xx/rt30xx (USB) support
....................[ * ] rt2800usb - Include support for rt33xx devices
....................[ * ] rt2800usb - Include support for rt35xx devices (EXPERIMENTAL)
....................[ * ] rt2800usb - Include support for rt53xx devices (EXPERIMENTAL)
....................[ * ] rt2800usb - Include support for unknown (USB) devices
4. Mark the OTG support on !:
Device Drivers ---->
.....[*] USB support ---->
..........[ ] OTG support ............................................................(Mark it to [*])
..........< > Enable Wireless USB extensions (EXPERIMENTAL) ..(Makr it to <*>)
5. Make Kernel hacking:
Kernel hacking ---->
.....(1024) Warn for stack frames larger than (needs gcc 4.4) (Edit this to 1032)
######################### 4. compile the Kernel. ###########################
make ARCH=arm CROSS_COMPILE=$CCOMPILER -j6
(with make -i ... you can ignor errors, but i think thats not good ^^)
########################## 5. make ramdisk.gz. ###########################
mkdir ramdisk-new
cp -ax ramdisk ./ramdisk-new
#clear git repositories in ramfs
find ramdisk-new -name .git -exec rm -rf {} \;
#remove empty directory placeholders
find ramdisk-new -name EMPTY_DIRECTORY -exec rm -rf {} \;
rm -rf ramdisk-new/tmp/*
#remove mercurial repository
rm -rf ramdisk-new/.hg
#copy modules into ramfs
mkdir -p ramdisk-new/lib/modules
find -name '*.ko' -exec cp -av {} ramdisk-new/lib/modules/
#make ramdisk.gz
mkbootfs ./ramdisk-new | gzip > ramdisk.gz
########################### 6. make boot.img. ############################
./mkbootimg --kernel arch/arm/boot/zImage --ramdisk ramdisk.gz --board smdk4x12 --base 0x10000000 --pagesize 2048 --ramdiskaddr 0x11000000 -o boot.img
################ 7. make modules.tgz for your chroot Linux. ###################
tar -czf modules.tgz `find . | grep ko$`
(... This modules.tgz you have to copy to sdcard0,
then go into chrootet (after you have flashed the new Kernel!) Linux and make: )
cd /lib/modules
mkdir `uname -r`
cd *
tar -zxf /sdcard0/modules.tgz
depmod -a
now turn the usb-wlan on S3 and make:
modprobe <your-driver>
example:
modprobe rt73usb
Now your Wifi-USB must be Online...
Soooo that was it from my self...
(For any Questions, you have. I'm on my Position...
Bye bye,
Master X
Please help me I have got HTC one mini on stock . Is it possible...?
Yes i think so...
In the theory at android 2.3 its possible to compile it with rt73usb extentials...
I'll do the kernel for i9500, but I'm afraid to damage the phone the wrong make.
If one makes the kernel for i9500 you Could you share?
yes, I did. and running rlt8187 alfa wifi on ubuntu.but wps not work. Everything other than these problems well
Probably, to add to another something and there are ( in kernel)
GT-I9500 cihazımdan Tapatalk kullanılarak gönderildi
LG G2 802 International Version
Can someone create a Kernel for This Device? Please?
With RTL 8187 Support
Would pay for it.
I added usb adapter device support to kernel successfully but then my wifi stopped working here is the dmesg of turning wifi on
Code:
<4>[ 2273.866333] wlan: disagrees about version of symbol cfg80211_ready_on_channel
<4>[ 2273.866455] wlan: Unknown symbol cfg80211_ready_on_channel (err -22)
<4>[ 2273.866729] wlan: disagrees about version of symbol __ieee80211_get_channel
<4>[ 2273.866821] wlan: Unknown symbol __ieee80211_get_channel (err -22)
<4>[ 2273.867065] wlan: disagrees about version of symbol cfg80211_cqm_rssi_notify
<4>[ 2273.867187] wlan: Unknown symbol cfg80211_cqm_rssi_notify (err -22)
<4>[ 2273.867370] wlan: disagrees about version of symbol cfg80211_roamed
<4>[ 2273.867523] wlan: Unknown symbol cfg80211_roamed (err -22)
<4>[ 2273.867614] wlan: disagrees about version of symbol cfg80211_pmksa_candidate_notify
<4>[ 2273.867736] wlan: Unknown symbol cfg80211_pmksa_candidate_notify (err -22)
<4>[ 2273.867858] wlan: disagrees about version of symbol wiphy_register
<4>[ 2273.868011] wlan: Unknown symbol wiphy_register (err -22)
<4>[ 2273.868133] wlan: disagrees about version of symbol cfg80211_disconnected
<4>[ 2273.868286] wlan: Unknown symbol cfg80211_disconnected (err -22)
<4>[ 2273.868499] wlan: disagrees about version of symbol cfg80211_new_sta
<4>[ 2273.868591] wlan: Unknown symbol cfg80211_new_sta (err -22)
<4>[ 2273.868774] wlan: disagrees about version of symbol cfg80211_tdls_oper_request
<4>[ 2273.868865] wlan: Unknown symbol cfg80211_tdls_oper_request (err -22)
<4>[ 2273.869018] wlan: disagrees about version of symbol cfg80211_connect_result
<4>[ 2273.869171] wlan: Unknown symbol cfg80211_connect_result (err -22)
<4>[ 2273.869262] wlan: disagrees about version of symbol cfg80211_inform_bss_frame
<4>[ 2273.869415] wlan: Unknown symbol cfg80211_inform_bss_frame (err -22)
<4>[ 2273.869506] wlan: disagrees about version of symbol wiphy_new
<4>[ 2273.869659] wlan: Unknown symbol wiphy_new (err -22)
<4>[ 2273.869781] wlan: disagrees about version of symbol cfg80211_rx_mgmt
<4>[ 2273.869903] wlan: Unknown symbol cfg80211_rx_mgmt (err -22)
<4>[ 2273.870117] wlan: disagrees about version of symbol cfg80211_send_unprot_deauth
<4>[ 2273.870239] wlan: Unknown symbol cfg80211_send_unprot_deauth (err -22)
<4>[ 2273.870361] wlan: disagrees about version of symbol cfg80211_mgmt_tx_status
<4>[ 2273.870513] wlan: Unknown symbol cfg80211_mgmt_tx_status (err -22)
<4>[ 2273.870727] wlan: disagrees about version of symbol cfg80211_inform_bss
<4>[ 2273.870819] wlan: Unknown symbol cfg80211_inform_bss (err -22)
<4>[ 2273.871002] wlan: disagrees about version of symbol wireless_send_event
<4>[ 2273.871093] wlan: Unknown symbol wireless_send_event (err -22)
<4>[ 2273.871246] wlan: disagrees about version of symbol wiphy_free
<4>[ 2273.871337] wlan: Unknown symbol wiphy_free (err -22)
<4>[ 2273.871520] wlan: disagrees about version of symbol cfg80211_scan_done
<4>[ 2273.871612] wlan: Unknown symbol cfg80211_scan_done (err -22)
<4>[ 2273.871795] wlan: disagrees about version of symbol regulatory_hint
<4>[ 2273.871856] wlan: Unknown symbol regulatory_hint (err -22)
<4>[ 2273.872039] wlan: disagrees about version of symbol cfg80211_get_bss
<4>[ 2273.872100] wlan: Unknown symbol cfg80211_get_bss (err -22)
<4>[ 2273.872283] wlan: disagrees about version of symbol cfg80211_michael_mic_failure
<4>[ 2273.872436] wlan: Unknown symbol cfg80211_michael_mic_failure (err -22)
<4>[ 2273.872528] wlan: disagrees about version of symbol cfg80211_ibss_joined
<4>[ 2273.872680] wlan: Unknown symbol cfg80211_ibss_joined (err -22)
<4>[ 2273.872833] wlan: disagrees about version of symbol cfg80211_del_sta
<4>[ 2273.872985] wlan: Unknown symbol cfg80211_del_sta (err -22)
<4>[ 2273.880584] wlan: disagrees about version of symbol cfg80211_remain_on_channel_expired
<4>[ 2273.880737] wlan: Unknown symbol cfg80211_remain_on_channel_expired (err -22)
<4>[ 2273.880889] wlan: disagrees about version of symbol wiphy_unregister
<4>[ 2273.880950] wlan: Unknown symbol wiphy_unregister (err -22)
<6>[ 2277.103332] SLIM_CL: skip reconfig sequence
<6>[ 2336.262878] SLIM_CL: skip reconfig sequence
<6>[ 2341.206115] SLIM_CL: skip reconfig sequence
<3>[ 2372.867187] init: untracked pid 7791 exited
<6>[ 2375.211242] SLIM_CL: skip reconfig sequence
<6>[ 2378.713043] SLIM_CL: skip reconfig sequence
<6>[ 2385.924896] check_recover_vbus_collapse: VBUS input current still limiting to 700 mA. Retry set
<6>[ 2397.413330] SLIM_CL: skip reconfig sequence
<4>[ 2464.730682] set_usb_max_current: setting current max to 1500
<4>[ 2544.752166] set_usb_max_current: setting current max to 1500
<4>[ 2604.769744] set_usb_max_current: setting current max to 1500
<4>[ 2674.810363] set_usb_max_current: setting current max to 1500
<6>[ 2686.035491] SLIM_CL: skip reconfig sequence
<3>[ 2690.290008] qup_i2c qup_i2c.0: QUP: I2C status flags :0x1300c8, irq:226
<3>[ 2690.290191] qup_i2c qup_i2c.0: I2C slave addr:0x28 not connected
<3>[ 2690.300445] pn544 0-0028: pn544_dev_write: i2c write err -107, but retry 1
<3>[ 2691.778778] qup_i2c qup_i2c.0: QUP: I2C status flags :0x1343c8, irq:226
<3>[ 2691.778961] qup_i2c qup_i2c.0: I2C slave addr:0x28 not connected
<3>[ 2691.789093] pn544 0-0028: pn544_dev_write: i2c write err -107, but retry 1
<6>[ 2694.949035] SLIM_CL: skip reconfig sequence
<4>[ 2714.834625] set_usb_max_current: setting current max to 1500
<6>[ 2715.883575] SLIM_CL: skip reconfig sequence
<6>[ 2843.803405] SLIM_CL: skip reconfig sequence
<6>[ 2854.273345] SLIM_CL: skip reconfig sequence
<6>[ 2955.025512] msm_otg msm_otg: USB exited from low power mode
<6>[ 2955.026306] msm_otg msm_otg: b_idle work, inputs=0x00000001
<6>[ 2955.026580] msm_otg msm_otg: Avail curr from USB = 0
<6>[ 2955.026885] msm_otg msm_otg: phy_reset: success
<6>[ 2955.136352] msm_otg msm_otg: USB in low power mode
<6>[ 2969.677581] msm_otg msm_otg: USB exited from low power mode
<6>[ 2969.678131] msm_otg msm_otg: b_idle work, inputs=0x00000003
<6>[ 2969.853424] msm_otg msm_otg: chg_type = USB_SDP_CHARGER
<6>[ 2969.853576] msm_otg msm_otg: b_idle work, inputs=0x00000003
<6>[ 2969.859283] msm_hsusb msm_hsusb: vbus online
<6>[ 2969.859436] msm_hsusb msm_hsusb: CI13XXX_CONTROLLER_RESET_EVENT received
<6>[ 2969.859558] msm_otg msm_otg: changed to b_peripheral, from b_idle
<6>[ 2970.140228] msm_hsusb msm_hsusb: reset
<6>[ 2970.140686] android_work: android_work: did not send uevent (0 0 (null))
<6>[ 2970.178863] android_work: android_work: sent uevent USB_STATE=CONNECTED
<6>[ 2970.182403] msm_hsusb msm_hsusb: reset
<6>[ 2970.182891] android_work: android_work: sent uevent USB_STATE=DISCONNECTED
<6>[ 2970.261993] android_work: android_work: sent uevent USB_STATE=CONNECTED
<6>[ 2971.677764] android_usb gadget: high-speed config #1: android_usb
<6>[ 2971.677917] msm_otg msm_otg: Avail curr from USB = 500
<6>[ 2971.733306] android_work: android_work: sent uevent USB_STATE=CONFIGURED
<6>[ 2971.880920] mtp_open
<6>[ 2974.863128] msm_ta_detect_work: USB exit ta detection - frindex
<3>[ 3000.568115] init: untracked pid 8878 exited
<3>[ 3003.624877] init: untracked pid 8948 exited
<6>[ 3005.894012] SLIM_CL: skip reconfig sequence
I think problem occurs when I enable "cfg80211 wireless extensions compatibility" but unless enabling it i cannot see the wifi adapter in airmon-ng
if CONFIG_CFG80211_WEXT=y = inner WLAN wont work
if CONFIG_CFG80211_WEXT=n = usb wifi adapter wont work with aircrack, reaver
getprop
[wifi.interface]: [wlan0]
[wlan.driver.ath]: [0]
[wlan.driver.config]: [/data/misc/wifi/WCNSS_qcom_cfg.ini]
[wlan.driver.status]: [unloaded]
logcat:
I/WifiManager(16050): Process ndroid.settings enabled Wifi
D/WifiService( 779): setWifiEnabled: true pid=16050, uid=1000
E/WifiStateMachine( 779): Failed to load driver!
E/WifiStateMachine( 779): DriverFailedState
here are documentations about it but they are too complex for me :
https://community.freescale.com/docs/DOC-93603
http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html
as fas as I understand from what I read I should recompile wlan.ko after building new kernel but i dont know how
can't find any help
So I have this new tablet, and knowing all the bugs surrounding the touchscreen, decided not to update it (it came as stock JSS15J). However I still want to be able to use CM on it, so I patched the kernel to never update the touchscreen fw. Here's the compiled recovery from CM-10.2 synced today (october 2th), and then the kernel patch:
https://docs.google.com/file/d/0ByHQWL5Q6bSwYXJpaE9JZ0dnbVE/edit?usp=sharing
Code:
diff --git a/drivers/input/touchscreen/ektf3k.c b/drivers/input/touchscreen/ektf3k.c
index 4b6a7e7..451bcee 100755
--- a/drivers/input/touchscreen/ektf3k.c
+++ b/drivers/input/touchscreen/ektf3k.c
@@ -392,7 +392,7 @@ static int check_fw_version(const unsigned char*firmware, unsigned int size, int
id = firmware[size - 2*FIRMWARE_PAGE_SIZE + 122] |
(firmware[size - 2*FIRMWARE_PAGE_SIZE + 123] << 8);
- touch_debug(DEBUG_INFO, "The firmware was version 0x%X and id:0x%X\n", version, id);
+ touch_debug(DEBUG_INFO, "The firmware was version 0x%X and id:0x%X, new fw_version: 0x%X\n", version, id, fw_version);
if (id == 0x3029 && BOOTCODE_VERSION >= 0x6046) {
/*if the touch firmware was empty, always update firmware*/
@@ -1318,7 +1318,10 @@ static int firmware_update_header(struct i2c_client *client, unsigned char *firm
unsigned char nb_isp_cmd[4] = {0x45, 0x49, 0x41, 0x50};
unsigned char *cursor;
struct elan_ktf3k_ts_data *ts = i2c_get_clientdata(client);
-
+
+ printk("[ektf3k]: firmware_update_header: not updating your firmware, bro\n");
+ return 0;
+
if(ts == NULL)
return -1;
I can also upload the kang if anyone needs it. Note my patch has the old/new version swapped (small bug), it says new fw_version, but it's actually the current version.
I tested it with my own device just in case someone is wondering wether it works or not.
On a slightly unrelated note, my CM 10.2 kang would not have the Wi-Fi module loading. I had this error in logcat:
Code:
E/WifiHW ( 190): Failed to write wlan fw path param (Operation not permitted)
E/WifiStateMachine( 597): Failed to reload STA firmware java.lang.IllegalStateException: command '6 softap fwreload wlan0 STA' failed with '400 6 SoftAP command has failed'
Digging a bit further led to this error in the kernel log:
Code:
<6>[ 69.311614] wlan: loading driver v3.2.2.17B
<3>[ 69.314300] wlan: [573:F :HDD] hdd_parse_config_ini: request_firmware failed -2
However the official nightly didn't have this issue. I tracked it down to the lack of a symbolic link, which I had to create manually:
Code:
mount -o remount,rw /dev/block/platform/msm_sdcc.1/by-name/system /system
cd /vendor/firmware/wlan/prima/
ln -s /data/misc/wifi/WCNSS_qcom_cfg.ini WCNSS_qcom_cfg.ini
ln -s /data/misc/wifi/WCNSS_qcom_wlan_nv.bin WCNSS_qcom_wlan_nv.bin
I hope this information will be useful to others. Still not sure why my build has this problem and the official builds don't.
Many people have MacBooks and they MacBooks have a terminal. This terminal runs bash and other unix commands, so why can't we compile a kernel. That's what I thought at first... Then the errors started...
I will not be responsible if you bork, brick, or blow up your devices in the process
Notes: This is using clang, gcc should also work using this procedure, just with a few alterations exactly like compiling on linux
This guide is intended to help people compile their kernel on OSX
Step 1: Getting the dependencies and setting up build environment
Installing package managers:
Xcode HAS to be installed for this to work! If you just want the command line tools, type "xcode-select --install". To set the OS to use the command line tools from the app, type "xcode-select --switch /Applications/Xcode.app/Contents/Developer"
Install homebrew here: http://brew.sh
Install macports here (Follow source instructions): http://https://guide.macports.org/chunked/installing.macports.html
Set up build environment:
The android developers website gives great instructions on how to do this, but they use macports, which I tend to stay away from. However, this guide will use macports until I can figure out the homebrew alternatives for these packages
MacPorts packages: gmake libsdl git gnupg bison (exclude the git packages if you already have them)
Reference site: https://source.android.com/setup/build/initializing
Case Sensitive disk image - Android anything won't build unless the filesystem is case sensitive (APFS isn't), so we need to create a sparseimage for it
Go into disk utility and hit file, new image, blank image or Command-N
Set (in this order) Image Format: sparse disk image, Format: Mac OS Extended (Journaled, case-sensitive), Size: 20GB, Name: Android
Create the new image
Edit your bash profile by entering "open -a TextEdit ~/.bash_profile" and make a mountAndroid function
mountandroid() { hdiutil attach ~/android.sparseimage -mountpoint /Volumes/android; }
Open a new terminal window and type mountandroid
Your new disk image is mounted at /Volumes/android
Setting the PATH:
Open your bash_profile
add this line:
export PATH="/usr/local/bin:$PATH"
export PATH="/opt/local/bin:$PATH"
Save and open a new window
Step 2 - Cloning the kernel: I don't know where you get your kernels from, but you should know the basics on how to clone a source, clone the source to /Volumes/android
Step 3 - Getting the Toolchain: For now, I use prebuilts via the NDK, However, Crosstool-ng is a viable option
Download the NDK here https://developer.android.com/ndk/downloads/
Make a standalone Toolchain inside your case sensitive image (For arm64 devices: use the guide for BOTH arm and arm64)
https://developer.android.com/ndk/guides/standalone_toolchain
Step 4 - Linking it all together:
Creating a script to use (inside kernel source folder)
make O=out ARCH=arm64 **Your_defconfig**
make -j4 O=out ARCH=arm64 CC='/Volumes/android/**Toolchain folder**/bin/clang' CLANG_TRIPLE=aarch64-linux-gnu CROSS_COMPILE_ARM32='/Volumes/android/**Toolchain arm folder**/bin/arm-linux-androideabi-' CROSS_COMPILE='/Volumes/android/**Toolchain arm folder**/bin/aarch64-linux-android-'
The arm64 devices have to use the CROSS_COMPILE_ARM32 line, if you don't have this, just omit the line
Then just type ./**Script Name**.sh (make sure to chmod +x or 755 it first) and you're good to go!
Step 5 - Errors... Those stupid errors!: There are a few known errors that can be easily fixed, but they're very annoying
elf.h error - Open the file /usr/local/include and make a new file, elf.h
Paste this in there:
#include "../opt/libelf/include/libelf/gelf.h"
#define R_386_NONE 0
#define R_386_32 1
#define R_386_PC32 2
#define R_ARM_NONE 0
#define R_ARM_PC24 1
#define R_ARM_ABS32 2
#define R_MIPS_NONE 0
#define R_MIPS_16 1
#define R_MIPS_32 2
#define R_MIPS_REL32 3
#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6
#define R_IA64_IMM64 0x23 /* symbol + addend, mov imm64 */
#define R_PPC_ADDR32 1 /* 32bit absolute address */
#define R_PPC64_ADDR64 38 /* doubleword64 S + A */
#define R_SH_DIR32 1
#define R_SPARC_64 32 /* Direct 64 bit */
#define R_X86_64_64 1 /* Direct 64 bit */
#define R_390_32 4 /* Direct 32 bit. */
#define R_390_64 22 /* Direct 64 bit. */
#define R_MIPS_64 18
#define EF_ARM_EABIMASK 0XFF000000
#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
vdsomunge.c errors (all fixed with this simple file from torvalds himself)
Replace your arch/arm/vdso/vdsomunge.c file with this one
vdso_offset_sigtramp undeclared (shows signal.c in terminal)
change the file arch/arm64/vdso/gen_vdso_offsets.sh
Replace the last line to this - 's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2 0x\1/p'
This removes the "t" in the "2t0x" part
So, after this, your kernel should be built without any complications! I have some requests in the post below, so help me out and gimme a thanks!
Things I need help finding:
Building crosstool-ng on mac
building Dragon TC on mac or a clang 8.0 toolchain
Please put your solutions in the comments so I can include them in the main thread
thanks for the guide!
I'm having one problem though
Code:
Undefined symbols for architecture x86_64:
"_OPENSSL_init_crypto", referenced from:
_main in cc6WbheD.o
ld: symbol(s) not found for architecture x86_64
I posted a complete revision alongside a recent kernel, but below is a summary of the changes / updates for using this guide in 2021
StarKissed/StarKissed_I005_1
Contribute to StarKissed/StarKissed_I005_1 development by creating an account on GitHub.
github.com
Disclaimer: As of June 2021, Android no longer supports building on Mac
arch/arm64/vdso/gen_vdso_offsets.sh =>
arch/arm64/kernel/vdso/gen_vdso_offsets.sh
Code:
brew install gnu-sed
export PATH=/usr/local/opt/gnu-sed/libexec/gnubin:$PATH
readlink: illegal option -- f
usage: readlink [-n] [file ...]
Code:
brew install coreutils
export PATH=/usr/local/opt/coreutils/libexec/gnubin:$PATH
find: -printf: unknown primary or operator
Code:
brew install findutils
export PATH=/usr/local/opt/findutils/libexec/gnubin:$PATH
Homebrew alternatives
Code:
brew install make
brew install sdl
brew install gnupg
brew install bison
Quick Homebrew Alternatives
Enter "homebrew [command name]" in google search
Enter command from https://formulae.brew.sh/formula/
juampapo546 said:
thanks for the guide!
I'm having one problem though
Code:
Undefined symbols for architecture x86_64:
"_OPENSSL_init_crypto", referenced from:
_main in cc6WbheD.o
ld: symbol(s) not found for architecture x86_64
Click to expand...
Click to collapse
Code:
brew install openssl
export PKG_CONFIG_PATH=/usr/local/opt/[email protected]/lib/pkgconfig:$PKG_CONFIG_PATH
You may also need to explicitly include in scripts/Makefile
Code:
HOST_EXTRACFLAGS += -I$(srctree)/tools/include
ifeq ($(shell uname),Darwin)
HOST_EXTRACFLAGS += -I/usr/local/opt/[email protected]/include -L/usr/local/opt/[email protected]/lib
endif