OK6410移植mjpg-streamer及遇到的問題的處理

移植過程中參考了http://blog.csdn.net/jason6765599/article/details/19838621#comments,表示感謝!

開發板OK6410

開發板內核linux3.0.1,是下載的網友稍作修改的飛凌提供的內核,內核的下載地址http://download.csdn.net/detail/improve_perfect/7627083

用的usb攝像頭zc301.下載的內核中已經配置好了。

PC虛擬機機Ubuntu12 系統

一、jpeg庫的移植

1. 下載源碼

MJPG-streamer程序調用了jpeg庫文件,因此在進行移植之前,我們需要先移植jpeg庫。從網站http://www.ijg.org/files/jpegsrc.v8b.tar.gz下載源碼包,代碼如下:

tar xvf jpegsrc.v8b.tar.gz

#cd jpeg-8b

2. 修改配置

#./configure--prefix=/home/linux/6410/video/jpeg --host=arm-none-linux-gnueabi

注:/home/linux/6410/video/jpeg是自己規定的,別的目錄也可以,但要與後面匹配。

3. 編譯與安裝

#make

#make install

    在/home/linux/64105/video/jpeg/lib目錄下會生成如下文件

    libjpeg.a  libjpeg.so    libjpeg.so.8.0.2

    libjpeg.la libjpeg.so.8 

4.拷貝文件

拷貝libjpeg.s0.8鏈接和 libjpeg.so.8.0.2庫到開發板文件系統lib下中


二、 MJPG-streamer的移植

1.下載源碼

安裝好jpeg庫後即可進行MJPG-streamer的移植,源碼包下載地址爲http://sourceforge.net/projects/mjpg-streamer/,但源碼不能直接編譯,結合ARM11的硬件設備以及燒寫的Linux 3.0.1系統,需對源碼做一定修改,主要如下:

#tar zxvf mjpg-streamer-r63.tar.gz

#cd mjpg-streamer-r63

2.修改源碼

2.1 修改頂層makefile及plugins目錄中的下層各個目錄的各級makefile:(我做的過程中就只是修改了頂級和input_uvc下的makefile結果給自己招來很多的麻煩)

將所有CC=gcc修改爲CC=arm-linux-gcc 或arm-none-linux-gnueabi-gcc。(我寫的前者)

2.2 修改plugins/input_uvc/Makfile:(就這個makefile修改的多一點,其他的都只是修改CC=arm-linux-gcc

修改$(CC) $(CFLAGS)-ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.l o dynctrl.lo

爲$(CC) $(CFLAGS) -ljpeg-L/home/linux/s3c2410-2.6.35/video/jpeg/lib -o $@ input_uvc.c v4l2uvc.lojpeg_utils.lo dynctrl.lo

修改CFLAGS += -O2-DLINUX -D_GNU_SOURCE -Wall -shared –fPIC

爲CFLAGS+=-O2 -DLINUX-D_GNU_SOURCE -Wall -shared -fPIC -I/home/linux/s3c2410-2.6.35/video/jpeg/include(是大寫的i)

3.編譯

#make

4.測試

4.1 在開發板上mkdir /mjpg

4.2 拷貝*.so到開發板的mjpg目錄下,mjpg_streamer到開發板的bin下並改變權限

(我是拷貝的編譯後的mjpg-streamer整個文件夾的內容複製到開發板的/mjpg目錄下,並且把mjpg_streamer放到開發板的bin下,一定要注意當從pc機複製到開發板的過程中如果是用ftp的話,文件的權限會發生改變,一定要在運行之前修改權限,chmod -R 755 /mjpg)

4.3 打開開開發板運行

#mjpg_streamer -i "/mjpg/input_uvc.so -d /dev/video2" -o "/mjpg/output_http.so"


4.4 驗證

用火狐瀏覽器打開一個網頁輸入下面地址就能夠看到一個視頻(開發板的IP爲192.168.0.232):
        http://192.168.0.232:8080/?action=stream 
        打開一個網頁輸入下面地址就能夠看到一個靜態圖片:
        http://192.168.0.232:8080/?action=snapshot

在調試過程中遇到的問題及解決方法:

1:飛凌的官方提供的usb攝像頭是羅技的,自己買的是中星微的zc301p,後來搜索確定這種攝像頭能用。如果用飛凌提供的測試程序luvcview,會出現像下面這樣的錯誤:

luvcview version v0.1 [CAM]s3c_fimc_open.id=0
ctrl->in_cam=c0736110[CAM]ctrl->in_cam->width=640
s3c_fimc_v4l2_querycap 0
s3c_fimc_v4l2_querycap 1
ctrl->vd->name = s3c-fimc0
s3c_fimc_v4l2_querycap 2
s3c_fimc_v4l2_querycap 3
s3c_fimc_v4l2_querycap 4
s3c_fimc_v4l2_querycap 5
s3c_fimc_v4l2_s_fmt_vid_cap filp=cbd35e00,fh=c07b1588,f=cbd6c200
s3c-fimc: changing to default resolution
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = cbdf8000
[00000000] *pgd=5bd0e831, *pte=00000000, *ppte=00000000
Internal error: Oops: 80000007 [#5]
Modules linked in:
CPU: 0    Tainted: G      D W    (3.0.1 #448)
PC is at 0x0
LR is at s3c_fimc_i2c_command+0x2c/0x40
pc : [<00000000>]    lr : [<c0345cb0>]    psr: a0000013
sp : cbd73c00  ip : cbd73c10  fp : cbd73c0c
r10: 00000000  r9 : c0735c38  r8 : cbd6c200
r7 : 00000000  r6 : c0736110  r5 : c07b1588  r4 : ffffffff
r3 : c073624c  r2 : 00000000  r1 : 00000001  r0 : cc45fb00
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 00c5387d  Table: 5bdf8008  DAC: 00000015
Process luvcview (pid: 188, stack limit = 0xcbd72268)
Stack: (0xcbd73c00 to 0xcbd74000)
3c00: cbd73c2c cbd73c10 c0347ac4 c0345c90 c07b1588 c0cc5616 00000000 00000000
3c20: cbd73c44 cbd73c30 c0346a88 c0347aa0 c0346a24 c0cc5616 cbd73e24 cbd73c48
3c40: c02fd660 c0346a30 000000d8 00000000 000000dc 00000000 000000e0 00000000
3c60: 000000e4 00000000 000000e8 00000000 000000ec 00000000 000000f0 00000000
3c80: 000000f4 00000000 000000f8 00000000 000000fc 00000000 00000100 00000000
3ca0: 00000104 00000000 00000108 00000000 0000010c 00000000 00000110 00000000
3cc0: 00000114 00000000 00000118 00000000 0000011c 00000000 00000120 00000000
3ce0: 00000124 00000000 00000128 00000000 0000012c 00000000 00000130 00000000
3d00: 00000134 00000000 00000138 00000000 0000013c 00000000 00000140 00000000
3d20: 00000000 c07b1588 cbd73d4c cbd73d38 c0349a68 c03488ec c07b1588 00000000
3d40: cbd73d6c cbd73d50 c0345d40 c04a931c c0735c38 cbd35e00 c0735c40 cc123d68
3d60: cbd73d8c cbd73d70 c02f9fe4 c0345cd0 00000000 00000000 cc542fc0 cc123d68
3d80: cbd73dbc cbd73d90 c00ed5b0 cbd6c200 c0cc5616 cbd35e00 c0735c38 c051ed40
3da0: c07b1588 cc123d68 c00ed490 cc124580 cbd73df4 cbd73dc0 c00e8dcc c00bd2a0
3dc0: cc081180 cc40fb40 cc123d68 cbd73ed0 cbd35e00 00000000 cbd36480 cbd73ed0
3de0: cc402380 c0cc5616 cbd73e24 cbd73df8 c00e68a8 c04a8a80 cbd73e1c 000000cc
3e00: c0cc5616 00000000 00000000 cbd6c200 cbd6c200 00000000 cbd73eec cbd73e28
3e20: c02ff978 c02fae84 cbd73e64 003b82f8 cbd35e00 00000003 cbd73e64 736d6153
3e40: 20676e75 434d4946 69724420 2d633373 636d6966 00000030 00000000 00000000
3e60: 00000000 00000000 00000000 434d4946 42484120 7375622d 00000000 00000000
3e80: 00000000 00000000 00000000 00000000 04000005 00000000 00000000 00000000
3ea0: 00000000 cbd73ed0 ffffff9c cbd59000 cbd72000 00000f8b cbd73f54 713cfc23
3ec0: c00f7d04 c051ec98 003b82f8 00000003 003b82f8 c0034ce8 cbd72000 00000000
3ee0: cbd73f04 cbd73ef0 c02f9de4 c02ff8c8 cbd35e00 003b82f8 cbd73f7c cbd73f08
3f00: c00f8f54 c02f9db4 cbd73fac cbd73f18 c04a86f4 c004bfd4 00000000 00000000
3f20: 00000000 00000000 c0034ba0 cbd72000 ecefa880 00000f8b cbd35e08 00000003
3f40: cbd59000 cbd72000 cbd73f94 cbd73f58 c00e8ae0 00000003 003b82f8 c0cc5616
3f60: cbd35e00 c0034ce8 cbd72000 00000000 cbd73fa4 cbd73f80 c00f9484 c00f8ed4
3f80: c0034ce8 00000000 003b82f8 003b8190 003b8008 00000036 00000000 cbd73fa8
3fa0: c0034b40 c00f9450 003b82f8 003b8190 00000003 c0cc5616 003b82f8 0000000f
3fc0: 003b82f8 003b8190 003b8008 00000036 00000000 00000140 00000000 000000f0
3fe0: 00000001 be8a4c98 0000ddec 401dc00c 80000010 00000003 5fffe821 5fffec21
[<c0345cb0>] (s3c_fimc_i2c_command+0x2c/0x40) from [<c0347ac4>] (s3c_fimc_change_resolution+0x30/0xf0)
[<c0347ac4>] (s3c_fimc_change_resolution+0x30/0xf0) from [<c0346a88>] (s3c_fimc_v4l2_s_parm+0x64/0x70)
[<c0346a88>] (s3c_fimc_v4l2_s_parm+0x64/0x70) from [<c02fd660>] (__video_do_ioctl+0x27e8/0x4a44)
[<c02fd660>] (__video_do_ioctl+0x27e8/0x4a44) from [<c02ff978>] (video_ioctl2+0xbc/0x594)
[<c02ff978>] (video_ioctl2+0xbc/0x594) from [<c02f9de4>] (v4l2_ioctl+0x3c/0x5c)
[<c02f9de4>] (v4l2_ioctl+0x3c/0x5c) from [<c00f8f54>] (do_vfs_ioctl+0x8c/0x57c)
[<c00f8f54>] (do_vfs_ioctl+0x8c/0x57c) from [<c00f9484>] (sys_ioctl+0x40/0x68)
[<c00f9484>] (sys_ioctl+0x40/0x68) from [<c0034b40>] (ret_fast_syscall+0x0/0x30)
Code: bad PC value
---[ end trace da227214a82491bd ]---
video /dev/video0 
Segmentation fault

請注意下面這個video /dev/video0 這是打開的video0這個設備。而在ok6410中,zc301攝像頭是添加的video2設備,我估計改成把測試程序默認啓動的設備號改成video2就可以了,當然這只是個推測,我還沒測試。

2.如果在編譯mjpeg_streamer時,沒有按照像上面所說的,把plugins目錄中的下層的各個文件夾下的makefile修改,當運行

#mjpg_streamer -i "/mjpg/input_uvc.so -d /dev/video2" -o "/mjpg/output_http.so"命令時,會出現類似這樣的錯誤

MJPG Streamer Version.: 2.0
 i: Using V4L2 device.: /dev/video2
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 5
 i: Format............: MJPEG
ERROR: could not find output plugin /mjpeg111/output_http.so
       Perhaps you want to adjust the search path with:
       # export LD_LIBRARY_PATH=/path/to/plugin/folder
       dlopen: /mjpeg111/output_http.so: cannot open shared object file: No such file or directory

網上提供的解決辦法是敲入如下命令:export LD_LIBRARY_PATH=/mjpg:$ LD_LIBRARY_PATH(我的共享庫文件時放在/mjpg目錄裏的),設定共享庫的搜索路徑就可以了!但是你會發現這樣修改後還是不行,因爲在你進行編譯的時候output_http.so是按照gcc編譯完成的沒有進行交叉編譯,所以在開發板上市無法識別的。當重新進行交叉編譯後,再運行剛纔的命令,就會出現這樣的結果



當運行#mjpg_streamer -i "/mjpg/input_uvc.so -d /dev/video2" -o "/mjpg/output_http.so"命令時,一定要加-d /dev/video2,否則會默認啓動video0設備,就會出現類似這樣的錯誤:

MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i[CAM]s3c_fimc_open.id=0
ctrl->in_cam=c0727e10[CAM]ctrl->in_cam->width=640
s3c_fimc_v4l2_querycap 0
s3c_fimc_v4l2_querycap 1
ctrl->vd->name = s3c-fimc0
s3c_fimc_v4l2_querycap 2
s3c_fimc_v4l2_querycap 3
s3c_fimc_v4l2_querycap 4
s3c_fimc_v4l2_querycap 5
s3c_fimc_v4l2_s_fmt_vid_cap filp=ce00b980,fh=c07afb38,f=ceb0e700
s3c-fimc: changing to default resolution
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = ce09c000
[00000000] *pgd=5e089031, *pte=00000000, *ppte=00000000
Internal error: Oops: 80000007 [#1]
last sysfs file: /sys/class/graphics/fb0/virtual_size
Modules linked in:
CPU: 0    Not tainted  (2.6.36.2 #382)
PC is at 0x0
LR is at s3c_fimc_i2c_command+0x2c/0x40
pc : [<00000000>]    lr : [<c03650d8>]    psr: a0000013
sp : ce097b90  ip : ce097ba0  fp : ce097b9c
r10: c0cc5616  r9 : c0519c98  r8 : ceb0e700
r7 : c07277a0  r6 : c0727e10  r5 : c07afb38  r4 : ffffffff
r3 : c0727da0  r2 : 00000000  r1 : 00000001  r0 : ce851900
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 00c5387d  Table: 5e09c008  DAC: 00000015
Process mjpg_streamer (pid: 114, stack limit = 0xce096268)
Stack: (0xce097b90 to 0xce098000)
7b80:                                     ce097bbc ce097ba0 c0366fd0 c03650b8
7ba0: ce097bd4 c07afb38 000000cc ceb0e700 ce097bd4 ce097bc0 c0365ecc c0366fa8
7bc0: 000000cc c0365e88 ce097dfc ce097bd8 c02dd814 c0365e94 00000048 00000000
7be0: 0000004c 00000000 00000050 00000000 00000054 00000000 00000058 18000000
7c00: 0000005c 00000000 00000068 00000000 0000006c 00000000 00000070 00000000
7c20: 00000074 00000000 00000078 18000000 0000007c 00000000 00000080 00000000
7c40: 00000084 00000000 00000088 00000000 0000008c 00000000 00000090 00000000
7c60: 00000094 00000000 00000098 18000000 000000a0 00000000 000000a4 00000000
7c80: 000000a8 00000000 000000ac 18000000 000000b0 00000000 000000c0 00000000
7ca0: 000000c4 ffffffff 000000d0 00100080 000000d4 00000000 000000d8 00000000
7cc0: 000000dc 00000000 000000e0 00000000 000000e4 00000000 000000e8 00000000
7ce0: 000000ec 00000000 000000f0 00000000 000000f4 00000000 000000f8 00000000
7d00: 000000fc 00000000 00000100 00000000 00000104 00000000 00000108 00000000
7d20: 0000010c 00000000 00000110 00000000 00000114 00000000 00000118 00000000
7d40: 0000011c 00000000 00000120 ceb0e700 ce00b980 00000000 00000128 c07277a0
7d60: c07afb38 00000000 00000130 00000000 00000134 00000000 00000138 00000000
7d80: 0000013c 00000000 00000140 00000000 c07afb38 c07afb70 ce097dc4 ce097da8
7da0: c0365168 c04a17dc c07277a0 ce00b980 c07277a8 ce00b980 ce097dfc ce097dc8
7dc0: c00d34ec c04a0ec4 ce00b980 00000000 ce963c80 00000000 000000cc c0cc5616
7de0: 00000000 ceb0e700 002da828 00000000 ce097ec4 ce097e00 c02dfda4 c02daf38
7e00: ce4ee380 ce00b980 00000003 ceb0e700 c00d56a8 736d6153 20676e75 434d4946
7e20: 69724420 2d633373 636d6966 00000030 00000000 00000000 00000000 00000000
7e40: 00000000 434d4946 42484120 7375622d 00000000 00000000 00000000 00000000
7e60: 00000000 00000000 04000005 00000000 00000000 00000000 00000000 c00ee88c
7e80: 00000000 ce00b980 ce097f5c ce097e98 c00e26d8 85104d64 00000000 ce00b980
7ea0: c0cc5616 002da828 ce00b980 c0032b68 ce096000 00000000 ce097ee4 ce097ec8
7ec0: c02da130 c02dfc6c ce805c80 ce00b980 00000004 002da828 ce097ef4 ce097ee8
7ee0: c00e46b8 c02da0fc ce097f7c ce097ef8 c00e4980 c00e4694 c0032234 c04a4a4c
7f00: ce097f3c ce097f10 c00d4d3c c04a0ec4 cebc9730 ce00b988 ce805c80 ce00b980
7f20: 00000005 00000000 00000000 00000000 c00ecba8 ce00b988 ce00b980 ce061000
7f40: 00000004 ce00b988 ce00b980 ce061000 ce097f94 00000004 002da828 c0cc5616
7f60: ce00b980 c0032b68 ce096000 00000000 ce097fa4 ce097f80 c00e4ec8 c00e4918
7f80: ce096000 00000000 002da828 002da6e0 002da558 00000036 00000000 ce097fa8
7fa0: c00329c0 c00e4e94 002da828 002da6e0 00000004 c0cc5616 002da828 00000005
7fc0: 002da828 002da6e0 002da558 00000036 40034160 4002b498 00000000 00000000
7fe0: 00000001 bebff348 4002a55c 4020600c 80000010 00000004 ffffffff ffffffff
[<c03650d8>] (s3c_fimc_i2c_command+0x2c/0x40) from [<c0366fd0>] (s3c_fimc_change_resolution+0x34/0xf4)
[<c0366fd0>] (s3c_fimc_change_resolution+0x34/0xf4) from [<c0365ecc>] (s3c_fimc_v4l2_s_parm+0x44/0x80)
[<c0365ecc>] (s3c_fimc_v4l2_s_parm+0x44/0x80) from [<c02dd814>] (__video_do_ioctl+0x28e8/0x49bc)
[<c02dd814>] (__video_do_ioctl+0x28e8/0x49bc) from [<c02dfda4>] (video_ioctl2+0x144/0x4ac)
[<c02dfda4>] (video_ioctl2+0x144/0x4ac) from [<c02da130>] (v4l2_ioctl+0x40/0x68)
[<c02da130>] (v4l2_ioctl+0x40/0x68) from [<c00e46b8>] (vfs_ioctl+0x30/0x44)
[<c00e46b8>] (vfs_ioctl+0x30/0x44) from [<c00e4980>] (do_vfs_ioctl+0x74/0x57c)
[<c00e4980>] (do_vfs_ioctl+0x74/0x57c) from [<c00e4ec8>] (sys_ioctl+0x40/0x68)
[<c00e4ec8>] (sys_ioctl+0x40/0x68) from [<c00329c0>] (ret_fast_syscall+0x0/0x30)
Code: bad PC value
---[ end trace 31663f2bbbf6916f ]---
: Format............: MJPEG
Segmentation fault

以上就是我在調試過程中,遇到的主要的問題。敬請參考!


發佈了4 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章