0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

找方案 | 基于NUVOTON MA35D1 在OpenWRT系统的 IP CAM方案

大大通 2023-01-16 14:40 次阅读

OpenWRT系统为嵌入式设备的Linux作业系统,并且拥有庞大的软件包管理功能。它提供了一个完全可写的文件系统,可让伙伴们从应用程序的供应商所提供的清单来配置。并允许使用者来自定义的设备,以适任任何应用程序。对于即将进行开发的伙伴们而言,OpenWRT系统能快速建构应用程序的框架,而无需重新建立该应用程序完整的固件。这也意味着可以进行完全自行定制的能力。

接下来,为伙伴们提供 基于Nuvoton MA35D1 IoT平台上,建构 OpenWRT 的方法,并搭载UVC Camera 来实现 IP CAM 监控的基本应用。

A. 硬件环境 : NuMaker-IoT-MA35D1EVB

NuMaker-IoT-MA35D1

61f6746c-9466-11ed-ad0d-dac502259ad0.jpg

主要核心MA35D1 规格如下:

MA35D16F987C with DDR3L (128 MB)

# Dual Cortex-A35 core running up to 800 MHz

# Cortex-M4 processor core running up to 180 MHz

# Real-Time Clock (RTC)

# Ethernet Poart : RGMII x1 and RMIIx1

# USB2.0: Host x1 and OTG x1

# SDIO: SD CARD x1

# QSPI : QSPI FLASH

# NAND: NAND Flash

# GPIO/UART/I2C/I2S/ADC...

B. 软体建置, 建议使用 Ubuntu 20.04-LTS 的设备来架设

1. 安装 Docker

sudo apt-get update

sudo apt install apt-transport-https ca-certificates curl software-properties-common

sudo apt install build-essential ccache ecj fastjar file g++ gawk gettext git java-propose-classpath libelf-dev libncurses5-dev libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget python-distutils-extra python3-setuptools python3-dev rsync subversion swig time xsltproc zlib1g-dev libssl-dev device-tree-compiler

pip3 install pycryptodomex pyelftools pyusb usb crypto ecdsa crcmod tqdm pycryptodome

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

git clone https://github.com/OpenNuvoton/MA35D1_Docker_Script.git

./build.sh

./join.sh

2. 新增并更换目录

mkdir shared/openwrt

cd shared/openwrt

3. 配置git 环境

git config –global user.email

sac_test@sacsys.com.tw

git config –global user.name ‘sac_test”

4. 下载 NUVOTON Openwrt 源代码

sac@90440e70ea26:~/shared/openwrt$ git clone https://github.com/OpenNuvoton/MA35D1_OpenWrt.git

Cloning into 'MA35D1_OpenWrt'...

remote: Enumerating objects: 532695, done.

remote: Counting objects: 100% (61/61), done.

remote: Compressing objects: 100% (39/39), done.

remote: Total 532695 (delta 13), reused 44 (delta 9), pack-reused 532634

Receiving objects: 100% (532695/532695), 196.76 MiB | 1.19 MiB/s, done.

Resolving deltas: 100% (358529/358529), done.

Updating files: 100% (8566/8566), done.

sac@90440e70ea26:~/shared/openwrt$

5. 更新和安装 OpenWRT原代码

sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$ ./scripts/feeds update -a

Updating feed 'packages' from 'https://git.openwrt.org/feed/packages.git^78bcd00c13587571b5c79ed2fc3363aa674aaef7' ...

Create index file './feeds/packages.index'

Checking 'working-make'... ok.

Checking 'case-sensitive-fs'... ok.

Checking 'proper-umask'... ok.

Checking 'gcc'... ok.

Checking 'working-gcc'... ok.

Checking 'g++'... ok.

Checking 'working-g++'... ok.

Checking 'ncurses'... ok.

Checking 'perl-data-dumper'... ok.

Checking 'perl-findbin'... ok.

Checking 'perl-file-copy'... ok.

Checking 'perl-file-compare'... ok.

Checking 'perl-thread-queue'... ok.

sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$ ./scripts/feeds install -a

Installing package 'freeswitch-mod-bcg729' from telephony

Installing package 'freetdm' from telephony

Installing package 'kamailio' from telephony

Installing package 'libosip2' from telephony

Installing package 'miax' from telephony

Installing package 'pcapsipdump' from telephony

Installing package 'restund' from telephony

Installing package 'rtpengine' from telephony

Installing package 'rtpproxy' from telephony

Installing package 'sipgrep' from telephony

Installing package 'sipp' from telephony

Installing package 'siproxd' from telephony

Installing package 'sngrep' from telephony

Installing package 'yate' from telephony

sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$

6. 配置并导入预设的内核设定文档

sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$ make menuconfig

Collecting package info: done

configuration written to .config

*** End of the configuration.

*** Execute 'make' to start the build or try 'make help'.

sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$

620edc50-9466-11ed-ad0d-dac502259ad0.jpg6225d9fa-9466-11ed-ad0d-dac502259ad0.jpg

sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$ make kernel_menuconfig

"Image/Build" squashfs

"Image/Build" ext4

time: target/linux/prereq#0.33#0.25#0.52

make[1] toolchain/install

make[2] tools/compile

make[3] -C tools/flock compile

make[3] -C tools/xz compile

make[3] -C tools/sed compile

make[3] -C tools/tar compile

make[3] -C tools/patch compile

make[3] -C tools/m4 compile

7. 配置完成开始编译sac@312bc2ae8ba4:~/shared/openwrt/MA35D1_OpenWrt$ make

8. 编译完成后,执行烧录,值得注意的是需离开 Docker 后才能正确的烧录成功

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ lsusb

Bus 001 Device 008: ID 0416:5963 Winbond Electronics Corp.

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. VMware Virtual USB Mouse

Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub

Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3 ./nuwriter.py -a ./ddrimg/enc_ddr3_winbond_512mb.bin

Successfully attached 1 device(s)

==== NAND ====

Page per block: 64

Page size: 2048

Block per flash: 4096

Bad block count: 0

Spare size: 64

Is uer config: 0

==== SPI NOR ====

ID: 0

Is uer config: 0

Quad read cmd: 0

Read sts cmd: 0

Write sts cmd: 0

Sts value: 0

Dummy byte: 0

==== eMMC ====

Block: 0

Reserved: 0

==== SPI NAND ====

Is uer config: 0

ID: 15710755

Page size: 2048

Spare size: 64

Quad read cmd: 107

Read sts cmd: 5

Write sts cmd: 1

Sts value: 2

Dummy byte: 1

Block per flash: 4096

Page per block: 64

Successfully get info from 1 device(s)

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3 ./nuwriter.py -e nand all

100%|##########

Successfully erased 1 device(s)

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3

python3 python3.8 python3.8-config python3-config

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3 ./nuwriter.py -w nand ../MA35D1_

MA35D1_Docker_Script/ MA35D1_NuWriter/

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3 ./nuwriter.py -w nand ../MA35D1_

MA35D1_Docker_Script/ MA35D1_NuWriter/

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3 ./nuwriter.py -w nand /home/user/openwrt/MA35D1_OpenWrt/bin/targets/ma35d1/iot/openwrt-ma35d1-iot-iot-

openwrt-ma35d1-iot-iot-128m-header-nand.bin

openwrt-ma35d1-iot-iot-128m.manifest

openwrt-ma35d1-iot-iot-128m-pack-nand.bin

openwrt-ma35d1-iot-iot-128m-rootfs.tar.gz

openwrt-ma35d1-iot-iot-128m-squashfs-firmware.bin

openwrt-ma35d1-iot-iot-128m-squashfs-sysupgrade.bin

openwrt-ma35d1-iot-iot-128m-uImage

openwrt-ma35d1-iot-iot-512m-header-nand.bin

openwrt-ma35d1-iot-iot-512m.manifest

openwrt-ma35d1-iot-iot-512m-pack-nand.bin

openwrt-ma35d1-iot-iot-512m-rootfs.tar.gz

openwrt-ma35d1-iot-iot-512m-squashfs-firmware.bin

openwrt-ma35d1-iot-iot-512m-squashfs-sysupgrade.bin

openwrt-ma35d1-iot-iot-512m-uImage

user@ubuntu:~/MA35D1/MA35D1_NuWriter$ sudo python3 ./nuwriter.py -w nand /home/user/openwrt/MA35D1_OpenWrt/bin/targets/ma35d1/iot/openwrt-ma35d1-iot-iot-512m-pack-nand.bin

Waiting for unpack Images ...

check pack file crc32 ...

Programming 1/7: 100%|########## Programming 2/7: 100%|########## Programming 3/7: 100%|########## Programming 4/7: 100%|########## Programming 5/7: 100%|########## Programming 6/7: 100%|########## Programming 7/7: 100%|########## Successfully programmed 1 device(s)

9. 执行到此,伙伴们已经可以看到开机的讯息了对吧?

INFO: ma35d1 config setup

INFO: 1.25V

WARNING: CA-PLL is 800000000 Hz without PSCI setting.

POR: 0x900

INFO: Boot from NAND

INFO: NAND: Size 1024MB, Page 2048, pages per block 64, oob size 64, bit correct 8

NOTICE: BL2: v2.3(release):OpenWrt v2.3-3 (ma35d1-cpu800-wb-512m)

62512e8e-9466-11ed-ad0d-dac502259ad0.jpg

接下来为了顺利执行摄相头的应用,需额外增设内核的配置,小弟为大家整理出来所需要的清单如下。

CONFIG_PACKAGE_librt=y

CONFIG_PACKAGE_libstdcpp=y

CONFIG_PACKAGE_kmod-input-core=y

CONFIG_PACKAGE_kmod-nls-base=y

CONFIG_PACKAGE_kmod-dma-buf=y

CONFIG_PACKAGE_kmod-usb-core=y

CONFIG_PACKAGE_kmod-usb-ehci=y

CONFIG_PACKAGE_kmod-usb2=y

CONFIG_PACKAGE_kmod-video-core=y

CONFIG_PACKAGE_kmod-video-cpia2=y

CONFIG_PACKAGE_kmod-video-gspca-core=y

CONFIG_PACKAGE_kmod-video-pwc=y

CONFIG_PACKAGE_kmod-video-uvc=y

CONFIG_PACKAGE_kmod-video-videobuf2=y

CONFIG_PACKAGE_libjpeg-turbo=y

CONFIG_PACKAGE_libprotobuf-c=y

CONFIG_PACKAGE_libuuid=y

CONFIG_PACKAGE_libv4l=y

CONFIG_PACKAGE_libzmq-nc=y

CONFIG_PACKAGE_mjpg-streamer=y

CONFIG_MJPG_STREAMER_V4L2=y

CONFIG_PACKAGE_mjpg-streamer-input-file=y

CONFIG_PACKAGE_mjpg-streamer-input-http=y

CONFIG_PACKAGE_mjpg-streamer-input-uvc=y

CONFIG_PACKAGE_mjpg-streamer-output-file=y

CONFIG_PACKAGE_mjpg-streamer-output-http=y

CONFIG_PACKAGE_mjpg-streamer-output-rtsp=y

CONFIG_PACKAGE_mjpg-streamer-output-zmq=y

CONFIG_PACKAGE_mjpg-streamer-www-simple=y

接下来为伙伴们演示 OpenWRT软路由的基本页面,在使用 ifconfig -a 得知网关的位址为 192.168.0.175时,我们可以在熟悉的浏览器上键入 IP 位置,来登入软路由的管理页面。

如下图所示,能得知 Nuvoton MA35D1-IoT的系统信息

62696224-9466-11ed-ad0d-dac502259ad0.jpg62750f0c-9466-11ed-ad0d-dac502259ad0.jpg

C. 再来为伙伴们演示如何透过软路由的camera 来实现 IP CAM的应用。

1. 配置摄像头输入的资料所期望的分办率和侦数,也可同时配置输出串口,本次演练是使用预设的串口 8080,并搭配方便又容易取得的 USB摄像头。

root@OpenWrt:/# mjpg_streamer -i "input_uvc.so -r HD -f 30 -d /dev/video0" -o "output_http.so"

MJPG Streamer Version.: 2.0

i: Using V4L2 device.: /dev/video0

i: Desired Resolution: 1280 x 720

i: Frames Per Second.: 30

i: Format............: JPEG

i: TV-Norm...........: DEFAULT

root@OpenWrt:/#

root@OpenWrt:/# /etc/init.d/mjpg-streamer enable

root@OpenWrt:/# /etc/init.d/mjpg-streamer start

root@OpenWrt:/#

此时我们已经可以在同一网域下,使用行动装置或是电脑的浏览器来透过网关的IP地址监看串流的影像。

6286067c-9466-11ed-ad0d-dac502259ad0.jpg

伙伴们一定很好奇,可以远端查看监控画面,是否能将摄像头画面录制下来呢?小弟再多新增一个方法让来录影

接上SD card

umount /dev/sda1

e2fsck /dev/sda1

mount /dev/sda1 /mnt

mjpg_streamer -i "input_uvc.so -d /dev/video0 " -o "output_http.so -p 8080 -o" -o "output_file12h.so -f /mnt -d 1000"

本次的演练就到此,有兴趣的伙伴们,可以一起来探讨和研究,谢谢。

►场景应用图

62a39034-9466-11ed-ad0d-dac502259ad0.jpg

产品实体图

62bf61ba-9466-11ed-ad0d-dac502259ad0.jpg

►展示板照片

62d364e4-9466-11ed-ad0d-dac502259ad0.jpg62f99420-9466-11ed-ad0d-dac502259ad0.jpg

►方案方块图

6318a86a-9466-11ed-ad0d-dac502259ad0.jpg

►核心技术优势

MA35D1 特色:

1. 核心为 A35与M4的集成,各司其职;

2. 独立的加密岛,系统更加安全;

3. 两种封装(LQFP与BGA),依照不同应用,多种选择;

4. 内涵记忆体(128MB/256MB/512MB),不须外挂,简化设计;

5. 界面丰富,应用多样;

►方案规格

处理器(MPU): NUVOTON MA35D1;

网路接口 : 有线网路 RJ45 x2 (RGMII), 无线网路(SDIO WIFI module);

相机规格: 720P @ 30;

作业系统: OpenWRT。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5058

    文章

    18972

    浏览量

    301905
  • 系统
    +关注

    关注

    1

    文章

    1006

    浏览量

    21291
  • MA35D1
    +关注

    关注

    0

    文章

    5

    浏览量

    152
收藏 人收藏

    评论

    相关推荐

    上新!米尔-新唐MA35D1核心板512M DDR新配置发布!

    米尔2024年8月推出了基于新唐MA35D1芯片设计的嵌入式处理器模块MYC-LMA35核心板及开发板。MA35D1是集成2个Cortex-A35
    发表于 11-08 18:01

    配置上新!米尔-新唐MA35D1核心板512M DDR配置发布!

    米尔2024年8月推出了基于新唐MA35D1芯片设计的嵌入式处理器模块MYC-LMA35核心板及开发板。MA35D1是集成2个Cortex-A35
    的头像 发表于 11-07 09:03 141次阅读
    配置上新!米尔-新唐<b class='flag-5'>MA35D1</b>核心板512M DDR配置发布!

    米尔新唐MA35D1核心板搭载原生17路UART和4路CAN FD,适用多种应用场景

    米尔电子发布了基于新唐MA35D1处理器设计的MYC-LMA35核心板,MA35D1处理器集成了双核Cortex-A35和Cortex-M4,原生17路UART和4路CAN FD接口,
    的头像 发表于 10-21 14:24 189次阅读
    米尔新唐<b class='flag-5'>MA35D1</b>核心板搭载原生17路UART和4路CAN FD,适用多种应用场景

    原生17路UART和4路CAN FD,解锁新唐MA35D1多种应用场景

    米尔电子发布了基于新唐MA35D1处理器设计的MYC-LMA35核心板,MA35D1处理器集成了双核Cortex-A35和Cortex-M4,原生17路UART和4路CANFD接口,可
    的头像 发表于 10-11 09:45 528次阅读
    原生17路UART和4路CAN FD,解锁新唐<b class='flag-5'>MA35D1</b>多种应用场景

    原生支持17路UART和4路CAN FD,新唐MA35D1核心板发布!

    米尔发布基于新唐MA35D1芯片设计的嵌入式处理器模块MYC-LMA35核心板及开发板,MA35D1是集成2个Cortex-A351个Co
    的头像 发表于 08-30 11:49 441次阅读
    原生支持17路UART和4路CAN FD,新唐<b class='flag-5'>MA35D1</b>核心板发布!

    米尔新唐MA35D1核心板发布!原生支持17路UART和4路CAN FD

    随机数发生器,支持安全启动和数据加密,确保系统安全性。 MA35D1核心板原生支持17路UART和4路CAN FD接口,无需额外扩展即可适合于需要大量串行通信和多路CAN总线连接的应用。除此之外
    发表于 08-16 17:27

    新唐MA35D1核心板-米尔开发板-原生支持17路UART和4路CAN FD

    MYC-LMA35核心板及开发板多核异构的新唐MA35D1核心板,赋能边缘计算新唐MA35D1,双核Cortex-A35和Cortex-M4,主频最高达1.0GHz;拥有强大的处理能力
    发表于 08-15 16:03 2次下载

    全志D1s软件入门之Tina Linux编译教程

    的是 d1s_nezha 板子,也正是 D1s Nezha 开发板。输入 5 回车即可。如果是其他板子,也可以输入对应板子的序号选择方案。 lunch 之后 SDK 会自动根据你所选择的
    发表于 06-05 09:50

    【昉·星光 2 高性能RISC-V单板计算机体验】Docker 中运行 OpenWrt

    ://forum.rvspace.org/t/visionfive2-v1-3b-openwrt-10/3275 传送固件 下载好以后,主机上利用 scp 发送到开发板 scp
    发表于 02-26 21:04

    MA35D1kernel上打RT-Linux补丁后,系统启动有一个异常信息是怎么回事?

    kernel上打上RT-Linux补丁后,系统启动有一个异常信息,见下: [ 5.098239] Nuvoton MA35D1 CAPLL/DDRPLL Cannot disabl
    发表于 01-15 08:07

    请问MA35D1的buildroot中uboot如何修改,以及uboot的开机画面如何显示?

    新塘MA35D1的官方软件buildroot,修改uboot,按照官方文档修改uboot配置项,make uboot-menuconfig。修改完成后,执行make rebuild,然后make
    发表于 01-15 08:02

    MA35D1 OpenWRT由nand切换到sdcard启动不能build出pack.bin怎么解决?

    MA35D1 OpenWRT 由nand切换到sdcard启动不能build出pack.bin
    发表于 01-15 07:29

    【飞腾派4G版免费试用】2飞腾派openwrt固件烧录

    \\\\9-openwrt\\\\openwrt19.07-kernel4.19-phytiumpi-test(1.00 GB (1,073,741,824 字节)), LAN1-et
    发表于 12-27 21:37

    至为芯TWS耳机充电仓方案IP5413P,300mA充电200mA放电支持2/1颗LED电量显示

    IP5413P是一款集成5V升压转换器、锂电池充电管理、电池电量指示的多功能电源管理芯片,为TWS蓝牙耳机充电仓提供完整的电源解决方案。特征:1、同步开关放电200mA同步升压转换升压
    的头像 发表于 12-22 17:21 1080次阅读
    至为芯TWS耳机充电仓<b class='flag-5'>方案</b>:<b class='flag-5'>IP</b>5413P,300<b class='flag-5'>mA</b>充电200<b class='flag-5'>mA</b>放电支持2/<b class='flag-5'>1</b>颗LED电量显示

    IP5316 为移动电源提供完整的电源解决方案

    完整的电源解决方案。得益于 IP5316 的高集成度与丰富功能,使其应用时仅需极少的外围器件,并有效减小整体方案的尺寸,降低 BOM 成本。IP
    发表于 12-05 09:28