開發平臺:飛凡嵌入式Hi3536
開發板採用SPI NORFlash啓動,默認內核不支持USB攝像頭工作,需重新編譯內核,並燒寫系統。
一、編譯內核
採用Hisi官方提供的SDK中內核linux-3.10.y,配置文件爲hi3536_full_A17_slave_defconfig。主要流程:
#cd /opt/hi3536/Hi3536_SDK_V2.0.2.0/osdrv/opensource/kernel/linux-3.10.y
#cp arch/arm/configs//hi3536_full_A17_slave_defconfig .config
#make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- menuconfig
由於對Linux驅動架構不熟悉,也不能確定所使用USB攝像頭的屬類,這裏將所有V4L2相關驅動全部選上,在menuconfig 搜索V4L2將所有的選爲Y,注意依賴項的選擇,如果依賴關係不正確的,menuconfig會提示。
保存、退出得到所需要的配置文件,然後編譯內核
#make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- uImage
二、燒寫系統
1、參數配置
配置tftp服務器
#可以使用任意的tftp服務器,將相關文件拷貝到tftp服務器目錄下;
#單板上電後,敲任意鍵進入u-boot。設置serverip(即tftp服務器的ip)、ipaddr(單板ip)和ethaddr(單板的MAC地址)。
setenv serverip xx.xx.xx.xx
setenv ipaddr xx.xx.xx.xx
setenv ethaddr xx:xx:xx:xx:xx:xx
setenv netmask xx.xx.xx.xx
setenv gatewayip xx.xx.xx.xx
ping serverip,確保網絡暢通。
2、根據系統硬件的配置,選擇合適的燒寫方案。我的開發辦爲SPI NOR啓動,採用的是“燒寫雙主控(SPIBOOT_NAND256M).txt”,注意的是由於我編譯出的內核大於了4M,按照原本的文件內核空間是沒有4M的,是沒有辦法燒寫的,所以要做修改。修改後文件如下:*****************************************************************************
燒寫雙主控(SPIBOOT_NAND256M).txt
*****************************************************************************
燒寫Glibc映像文件到SPI Flash
1)地址空間說明(其中,m表示master arm;s表示slave arm)
| 1M | 6M | 12M | 1M | 4M | 6M |
|---------------|---------------|---------------|---------------|---------------|---------------|
| boot(m) | kernel(m) | empty(m) | boot(s) | kernel(s) | rootfs(s) |
以下的操作均基於圖示的地址空間分配,您也可以根據實際情況進行調整。
2)燒寫主u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 osdrv_master/image_glibc/u-boot-hi3536.bin
sf probe 0
sf erase 0x0 0x100000
sf write 0x42000000 0x0 0x100000
reset
3)燒寫主內核
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 osdrv_master/image_glibc/uImage_hi3536
sf probe 0
sf erase 0x100000 0x600000
sf write 0x42000000 0x100000 0x600000
4)擦除空白,主文件系統放nand上
sf probe 0
sf erase 0x700000 0xc00000
5)燒寫從u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 osdrv_slave/image_glibc/u-boot-hi3536.bin
sf probe 0
sf erase 0x1300000 0x100000
sf write 0x42000000 0x1300000 0x100000
6)燒寫從內核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 osdrv_slave/image_glibc/uImage_hi3536
sf probe 0
sf erase 0x1400000 0x400000
sf write 0x42000000 0x1400000 0x400000
7)燒寫從文件系統
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 osdrv_slave/image_glibc/rootfs-SLV_FULL_REL.cramfs.initrd.img
sf probe 0
sf erase 0x1800000 0x600000
sf write 0x42000000 0x1800000 0x600000
8)燒寫主文件系統
mw.b 0x42000000 0xff 0x7000000
tftp 0x42000000 osdrv_master/image_glibc/rootfs_hi3536_2k_4bit_spiboot.yaffs2
nand erase;nand write.yaffs 0x42000000 0x0 0x661b180;(實際的文件系統大小)
9)設置啓動參數
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=yaffs2 mtdparts=hi_sfc:1M(boot),6M(kernel),12M(norflash);hinand,256M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0x600000;bootm 0x42000000'
setenv slave_autostart 1
setenv slave_bootcmd 'sf probe 0;sf read 0x81000000 0x1300000 0x80000;sf read 0x82000000 0x1400000 0x400000;sf read 0x83000000 0x1800000 0x600000;bootm 0x81000000 0x82000000 0x83000000'
setenv slave_bootargs 'mem=96M console=ttyAMA0,115200'
sa
之後重啓,插入USB攝像頭,會看到生成的 /dev/video0設備文件。