nf_
Posts: 1
Joined: Tue Jun 05, 2012 7:44 pm

Setup of motion, RTL8188CUS realtek based wifi & UVC webcam

Tue Jun 05, 2012 8:24 pm

Hi all.

Hopefully this will be of interest and help to someone trying to get a uvc webcam and/or realtek wifi dongle working on their rpi.

I hope this is the correct place to post this kind of topic.

*******************************************************************************************
Why.....

I wanted to have a rpi with a wifi dongle & a uvc logitech webcam and motion installed.

Problem.....
Arch, has the webcam modules but unable to get the rpi arch image to
support either of my 2 RTL8188CUS realtek based dongles.

: Belkin surf n150 micro adapter
: Edimax N150 Wireless nano USB Adaptor

Debian, doesn't immediately work with the dongle, but fairly easy to get working using this great
script: http://www.raspberrypi.org/phpBB3/viewt ... =26&t=6256

But.... the default rpi Debian kernel doesn't have the uvc webcam stuff.
So I cant use the script above, because I need to bake in the webcam.

So...these instructions should enable you to have a:

1) debian based distro (custom kernel)
2) wifi working with RTL8188CUS based adapters.
3) logitech webcam working.


*******************************************************************************************

What you will need

1 x linux machine
1 x rpi
1 x SD card
Wired network between rpi & linux machine
1 X Realtek based wireless dongle. !DO NOT PLUG IN UNTIL TOLD TO!
1 X Logitech webcam

*******************************************************************************************

Getting started..

Prepare SD with the debian6-19-04-2012.zip image from http://www.raspberrypi.org/downloads

Lots of methods to do this.. take a look at:

http://elinux.org/RPi_Easy_SD_Card_Setup

Resize SD card if you need to gparted on your linux machine is your friend.

*******************************************************************************************

Boot for the first time.

Login as the user you have been given as part of the download for your initial image and change the password

Change your user (pi) password

Code: Select all

  # passwd
Change the root passwd

Code: Select all

  # sudo passwd
 


Switch to root

Code: Select all

  # su
 


Enter the password you just changed

Get everything up to date

Code: Select all

  # apt-get update
  # apt-get update [to clear duplicates]
  # apt-get upgrade
At this point I normally (2xpi, 2xpowerAdapters ) get a kernel panic on first upgrade
Just pull plug out and reboot

Login as root this time

Code: Select all

  # apt-get upgrade  
 

I want a fixed IP on this machine so I can find it when i disconnect the monitor
dont do this if you want the wired to be dhcp

*startOfDontDoThisIfYouDontWant

Code: Select all

  # vi /etc/network/interfaces
  

(of course you could you emacs here)

Change the following line

Code: Select all

    iface eth0 inet dhcp

to

Code: Select all

   iface eth0 inet static

    address 192.168.0.80     <---- whatever is applicable to your lan config
    netmask 255.255.255.0    <---- whatever is applicable to your lan config
    network 192.168.0.0      <---- whatever is applicable to your lan config
    gateway 192.169.0.1      <---- whatever is applicable to your lan config
  
Then to write the file

Code: Select all

 :wq!

Code: Select all

   # ifdown eth0
    # ifup   eth0


* if after the next reboot you lose your ability to resolve hostnames
* i.e. ping google.com --> unknown host google.com
* just add:

Code: Select all

nameserver 8.8.8.8   (or your favourite DNS server IP address)
* to the bottom of /etc/resolv.conf

endOfDontDoThisIfYouDontWant

To see (or check ) the address assigned to your eth0 network interface

Code: Select all

  # ifconfig

eth0 inet addr, should be either a dhcp address or the one you set in the interfaces file.

Now I want to install Hexxeh/rpi-update tool
From here: https://github.com/Hexxeh/rpi-update

Code: Select all

 # cd
 # mkdir hexxeh
 # cd hexxeh
 # apt-get install ca-certificates
 # apt-get install git

Code: Select all

 # wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && chmod +x /usr/bin/rpi-update
 # rpi-update

Dont worry if you get this:

Code: Select all

 /opt/vc/sbin/vcfiled: error while loading shared libraries: libvchiq_arm.so: cannot open shared object file: No such file or directory
* Always happens and no one seems worried about it.

Ok..... lets leave our rpi alone for a minute.

On our second linux (Ubuntu in my case) machine

(A lot of this next bit sourced from here: http://elinux.org/RPi_Kernel_Compilation)

Code: Select all

  # sudo apt-get install gcc-4.6-arm-linux-gnueabi
  # sudo apt-get install git-core   
  # cd  
  # mkdir raspberrypi
  # cd raspberrypi
  # git clone https://github.com/raspberrypi/linux.git
  # cd linux
  # sudo ln -s  /usr/bin/arm-linux-gnueabi-gcc-4.6 /usr/bin/arm-linux-gnueabi-gcc
  # cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
  # make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
  # make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k
  
Depending on your machine this might take a while.

(You can use -j flag if you have multi-core see notes on above url
you might have to press ENTER a lot)

This will have create a kernel image in: /home/yourUser/raspberrypi/linux/arch/arm/boot/
called: "zImage"
Now we need to copy it to our pi

* back on the pi....

Code: Select all

  # apt-get install sshfs
  # cd /mnt
  # mkdir linux
  # sshfs [email protected]:/home/yourUser/raspberrypi/linux linux
  
You can check it mounted okay by:

Code: Select all

  # df -kh
  
* will show you that /mnt/linux is mounted to yourLinuxMachines linux directory

Code: Select all

# cd linux
  # make modules_install
  # cd /boot
  # cp kernel.img /root/backup-original-kernel.img		
  
Now copy your new kernel over....

Code: Select all

  # cp /mnt/linux/arch/arm/boot/zImage kernel.img
  
You can check it worked by doing this....

Code: Select all

 # diff kernel.img /root/backup-original-kernel.img 
  Binary files kernel.img and /root/backup-original-kernel.img differ
  
  #reboot 
  
Fingers crossed

Now to get the wireless driver working........

Back on your Linux Machine.

Code: Select all

  # cd
  # cd raspberrypi
  # mkdir wifi
   

Grab the UNIX (Linux) RTL8192CU driver package from http://www.realtek.com.tw
its a long url... but this shortLink should get you there.... http://goo.gl/81MRD
the file should be called something like this: RTL819xCU_USB_linux_v3.4.2_3727.20120404.zip

* Save the downloaded zip file in the wifi directory you just created
*! there must be a way of building this on the pi but I could not get it to work.
*! annoying as it means I cant use the install script.

Code: Select all

  # cd
  # cd raspberrypi/wifi
  # unzip   RTL819xCU_USB_linux_v3.4.2_3727.20120404.zip
  # cd RTL8188C_8192C_8192D_USB_linux_v3.4.2_3727.20120404
  # cd driver
  # tar -zxvf rtl8188C_8192C_8192D_usb_linux_v3.4.2_3727.20120404.tar.gz 
  # cd rtl8188C_8192C_8192D_usb_linux_v3.4.2_3727.20120404/
  # make KSRC=/home/yourUserName/raspberrypi/linux/ ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k
  # ls -ltrh

[you will now see you have a brand spanking new]

8192cu.ko

kernel module, that has been compiled to work with the kernel you prepared earlier.

Back to the rPi

Code: Select all

 # cd /mnt
 # mkdir wifi
 # sshfs [email protected]:/home/yourUser/raspberrypi/wifi wifi
 # cd /mnt/wifi/RTL8188C_8192C_8192D_USB_linux_v3.4.2_3727.20120404/driver/rtl8188C_8192C_8192D_usb_linux_v3.4.2_3727.20120404
 # cp 8192cu.ko /root
 # cd
 # install -p -m 644 8192cu.ko /lib/modules/3.1.9+/kernel/drivers/net/wireless/
 
Blacklist bad module

Code: Select all

 # echo 'blacklist rtl8192cu' >> /etc/modprobe.d/blacklist.conf
 #
 # echo >> /etc/network/interfaces   <--- put a blank line at the bottom of our interfaces file.
 # echo "allow-hotplug wlan0" >> /etc/network/interfaces   <---- if we want to allow hotplug of our adapter
 # echo >> /etc/network/interfaces
 # echo 'auto wlan0' >> /etc/network/interfaces   <-- create an entry for our wlan0
 # echo >> /etc/network/interfaces
 # echo 'iface wlan0 inet dhcp' >> /etc/network/interfaces  <-- we can change this to static if it works.
 # echo 'wpa-ssid "putYourSSIDhere" ' >> /etc/network/interfaces   <--- this is the name of your wireless Lan.
 # echo 'wpa-psk  "putYourWirelassPasswordHere" ' >> /etc/network/interfaces 
 # echo '8192cu' >> /etc/modules
 # depmod -a
 
Ok NOW plug in your wifi usb adapter..

Code: Select all

 # iwconfig
 
You should see something like this......

Code: Select all

lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"YourWifiNetworkName"  Nickname:"<[email protected]>"
          Mode:Managed  Frequency:2.462 GHz  Access Point: XX:YY:ZZ:AA:BB:CC   
          Bit Rate:150 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:****-****-****-****-****-****-****-****   Security mode:open
          Power Management:off
          Link Quality=94/100  Signal level=44/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0 

Code: Select all

 # ifconfig
 

Should give you something like this

Code: Select all

wlan0     Link encap:Ethernet  HWaddr XX:YY:ZZ:AA:BB:CC   
          inet addr:192.168.0.80  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:304 errors:0 dropped:310 overruns:0 frame:0
          TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:52965 (51.7 KiB)  TX bytes:4064 (3.9 KiB)
Back on your linuxMachine

Code: Select all

# ping 192.168.0.81
64 bytes from 192.168.0.81: icmp_seq=0 ttl=64 time=0.993 ms
  
Lets reboot and make sure it all works then.....

Code: Select all

# reboot
Ok... the goal of this for me is a rpi with wifi, camera and motion so actually I need to set
the wifi address to be static so I can connect to it, otherwise it will keep changing and without
a keyboard and screen attached it will be a pain.

Login to your rpi as root (or just prefix all commands with sudo, up to you.)

Code: Select all

   # vi /etc/network/interfaces
   
change the following line

Code: Select all

    iface wlan0 inet dhcp
  
to

Code: Select all

 
    iface wlan0 inet static
    address 192.168.0.81     <---- whatever is applicable to your lan config, not an address handed by your dhcp server
    netmask 255.255.255.0    <---- whatever is applicable to your lan config
    network 192.168.0.0      <---- whatever is applicable to your lan config
    gateway 192.169.0.1      <---- whatever is applicable to your lan config
  
Then to write the file

Code: Select all

  :wq!

Code: Select all

    # ifdown wlan0
    # ifup   wlan0
    # ifconfig
 
This should give you something like this

Code: Select all

wlan0     Link encap:Ethernet  HWaddr XX:YY:ZZ:AA:BB:CC   
          inet addr:192.168.0.80  Bcast:192.168.0.255  Mask:255.255.255.0  
    


Back on your linux machine open a terminal window and
* enter your password

Code: Select all

## hostname
raspberrypi

OK all good, we dont need a screen or keyboard anymore.
Now unplug the keyboard from the rpi, we will need the usb for your webcam.
Plug your webcam in

Code: Select all

 # dmesg  (in your terminal window)

You should see something like this...

Code: Select all

usb 1-1.2: new high speed USB device number 6 using dwc_otg
usb 1-1.2: New USB device found, idVendor=046d, idProduct=0825
usb 1-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=2
usb 1-1.2: SerialNumber: AB81D3F0
Linux video capture interface: v2.00
uvcvideo: Found UVC 1.00 device <unnamed> (046d:0825)
input: UVC Camera (046d:0825) as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input2
usbcore: registered new interface driver uvcvideo
USB Video Class driver (1.1.1)
6:3:1: cannot set freq 16000 to ep 0x86
6:3:2: cannot set freq 24000 to ep 0x86
6:3:3: cannot set freq 32000 to ep 0x86
6:3:4: cannot set freq 48000 to ep 0x86
usbcore: registered new interface driver snd-usb-audio
rtw_set_ps_mode(): Busy Traffic , Leave 802.11 power save..
rtl8192c_set_FwPwrMode_cmd(): Mode = 0, SmartPS = 0
* I have tried this with the following webcams...
* logitech c120
* logitech c160

* lets see if a video device has been created.

Code: Select all

# ls -ltrh /dev/video*
crw-rw---- 1 root video 81, 0 Jun  4 18:42 /dev/video0
* ok good.
* almost there..

Install motion

Code: Select all

# apt-get install motion
# apt-get install uvcdynctrl
# apt-get install guvcview
# vi /etc/motion/motion.conf
Change: webcam_localhost on --> webcam_localhost off <--- this means we will be able to see the camera stream from other machines
Change: videodevice /dev/video0 To whatever video device was shown by ls -ltrh /dev/video*

Optional (but these are my settings):
Change: width 320 --> width 640 This will depend on your camera model.
Change: height 240 --> height 480
Change: framerate 25 --> http://www.lavrsen.dk/foswiki/bin/view/ ... nFramerate
Change: webcam_maxrate 25 --> http://www.lavrsen.dk/foswiki/bin/view/ ... camMaxrate
Change: output_normal on --> off , Im happy just to have the avi I can always jpeg split later if i want

Code: Select all

:wq!   <--- Save your settings and exit.
Lets try it.

Code: Select all

# motion  
All done.

*******************************************************************************************

Hopefully this will be of use or interest to others, its quite long so if you spot any mistakes
feel free to point them out.

*******************************************************************************************
I have read a lot of web pages trying to get all this to work, and Im sure I will have forgotten
the authors of some.

But…thanks and credit to those below :

MrEngman --- http://www.raspberrypi.org/phpBB3/viewt ... =26&t=6256
everyone who wrote this: http://elinux.org/RPi_Kernel_Compilation
http://elinux.org/index.php?title=RPi_K ... on=history
Cian's Blog --- http://www.cianmcgovern.com/tag/8192cu/
Hexxeh ---http://hexxeh.net/
Kenneth Lavrsen -- for maintaining motion.
*******************************************************************************************

texy
Forum Moderator
Forum Moderator
Posts: 5160
Joined: Sat Mar 03, 2012 10:59 am
Location: Berkshire, England

Re: Setup of motion, RTL8188CUS realtek based wifi & UVC web

Wed Jun 06, 2012 11:45 am

Many thanks for this. You'll see from MrEngman's thread that the rpi-update seems to kill the 8188cus wifi dongle, at least it did for me and others a few days back.
Has something in the update changed such that it is no longer broken? I guess I can back up my SD card and give it another go.

Texy
Various male/female 40- and 26-way GPIO header for sale here ( IDEAL FOR YOUR PiZero ):
https://www.raspberrypi.org/forums/viewtopic.php?f=93&t=147682#p971555

Return to “Troubleshooting”