tag 标签: yocto

相关帖子
相关博文
  • 2025-3-6 12:00
    60 次阅读|
    0 个评论
    B y Toradex 秦海 1). 简介 基于 ARM 平台 Yocto Linux BSP 开发嵌入式设备,开发完成后需要生成用于量产的 Yocto Linux BSP 镜像,本文就基于 Toradex Yocto Linux BSP 镜像进行量产定制做流程说明。 2. 准备 a). Toradex Yocto Linux BSP 提供预编译好的基于 Downstream/Mainline Linux Kernel 版本的 Minimal 或者 Multimedia 镜像供客户测试开发,具体可以从下面地址下载。 https://developer.toradex.cn/software/toradex-embedded-software/toradex-download-links-torizon-linux-bsp-wince-and-partner-demos/#toradex-embedded-linux---yocto-project-reference-images b ). Toradex ARM 核心板 产品出厂预装 Toradex Easy Installer 工具软件,便于进行量产安装,因此对应使用的 Yocto Linux BSP 镜像也是适用于通过 Toradex Easy Installer 安装的镜像,具体关于 Toradex Easy Installer 的更详细介绍请见如下。 https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-overview/ c). 如果熟悉 Yocto Project 编译环境,可以参考如下文章通过 Yocto Project 来定制编译用于量产的 BSP 镜像,本文不做赘述。 https://www.toradex.cn/blog/tong-guo-ycoto-project-ding-zhi-qian-ru-shi-ycoto-linux-jing-xiang 3). 定制流程 a). 本文以适用于 Verdin i.MX8M Plus 的 Yocto Linux Mutimedia BSP Reference Image 镜像为例进行示例,其他平台和版本的 BSP 方法思路都一致。 b). 从 这里 下载针对 Verdin i.MX8M Plus 的 Yocto Linux Mutimedia BSP Reference Image V7.x 版本,并解压后包含文件如下。 ------------------------------- $ tar xvf Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3.tar $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/ $ tree -L 1 . ├── image.json ├── imx-boot ├── LA_OPT_NXP_SW.html ├── marketing.tar ├── prepare.sh ├── Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz ├── Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz ├── toradexlinux.png ├── u-boot-initial-env-sd └── wrapup.sh 0 directories, 10 files ------------------------------- c). image.json 是 BSP 镜像配置文件, Toradex Easy Installer 软件就是通过读取这个文件来进行 BSP 镜像更新的 ./ image.json 配置文件详细说明请见如下文章,不同的硬件平台具体的文件会有不同,尤其是底层 bootloader 相关的 binary 文件。本文只将和定制量产镜像相关的参数着重说明。 https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-configuration-files ./ “ autoinstall ” 参数定义了是否自动安装 BSP 镜像 ------------------------------- false - 不自动安装 (default) true - 自动安装 ------------------------------- ./ “u_boot_env” 参数定义了 U-Boot 启动动态加载的环境变量参数,可以将自定义的 U-Boot 环境变量参数更新到这个文件,刷写 BSP 镜像后启动即可以生效。 ------------------------------- u-boot-initial-env-sd (default) ------------------------------- ./ “ prepare_script ” 参数定义了 Toradex Easy Installer 工具进行分区和烧写镜像操作前需要进行的操作 ------------------------------- prepare.sh (default) ------------------------------- ./ “wrapup_script” 参数定义了 Toradex Easy Installer 工具完成分区和烧写镜像操作后需要进行的操作 ------------------------------- wrapup.sh (default) ------------------------------- ./ “blockdevs” 参数下面就定义了实际需要烧写的镜像以及分区,当然也可以参考上述配置文件说明定制添加自己需要的分区或者只读文件系统等。 // 通常首先是一个 FAT32 分区,用于烧写包括 Linux Kernel Image/Device-Tree Binary/Device-Tree Overlay Binary 等启动文件, ” filename ” 参数定义了写入的文件压缩包, "uncompressed_size" 定义了要写入文件未压缩前的大小 (MB) 。如果定制镜像过程中修改了压缩包文件的名字和文件大小就需要修改对应修改这两个参数。 ------------------------------- "label": "BOOT", "filesystem_type": "FAT", "mkfs_options": "", " filename ": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz", " uncompressed_size ": 8.671875 ------------------------------- // 然后是一个 EXT4 分区,用于烧写 Linux Rootfs 文件系统文件, ” filename ” 参数定义了写入的文件压缩包, "uncompressed_size" 定义了要写入文件未压缩前的大小 (MB) 。如果定制镜像过程中修改了 Rootfs 文件系统压缩包文件的名字和文件大小就需要修改对应修改这两个参数。 ------------------------------- "label": "RFS", "filesystem_type": "ext4", "mkfs_options": "-E nodiscard", " filename ": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz", " uncompressed_size ": 1272.7109375 ------------------------------- // 最后是 Raw 分区,用于烧写包括 Bootloader Binary 等在内的底层引导固件文件,文件可能是一个文件或者多个文件,根据不同的硬件平台不一致。 ” filename ” 参数定义了写入的 Binary 固件文件,比如 Verdin i.MX8MP 平台对应的是 imx-boot 文件就是一个包含 ATF/DDR Firmware/SPL/U-Boot 等的 Boot Container ,而比如 Verdin AM62 平台则每个固件都是分开的单独文件。 ------------------------------- "filesystem_type": "raw", "rawfiles": ------------------------------- d). “ imx-boot ” 如章节 (c) 说明是 Verdin i.MX8MP 平台对应的 Boot Container 文件,如果需要修改底层 Bootloader ,可以参考如下文章修改编译生成新的 “ imx-boot ” 文件后替换 BSP Image 镜像里面的文件。 https://developer.toradex.cn/linux-bsp/os-development/build-u-boot-and-linux-kernel-from-source-code/build-u-boot/ e). “prepare.sh” 如章节 (c) 说明是烧写镜像前需要进行的操作,通常不需要修改。 f). “ wrapup .sh” 如章节 (c) 说明是烧写镜像后进行的操作,如果使能了 “ autoinstall ” 自动安装可以增加如下内容在完成自动安装后自动重启。 ------------------------------- reboot -f exit 0 ------------------------------- g). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz” 压缩包文件如章节 (c) 说明是 FAT32 启动分区文件,请注意不同 Yocto Linux BSP 版本命名方式可能略有不同。 ./ 解压后内容如下 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/ $ mkdir bootfs $ tar Jxf Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz -C bootfs/ $ cd bootfs $ tree -L 1 . ├── boot.scr ├── Image.gz ├── imx8mp-verdin-nonwifi-dahlia.dtb ├── imx8mp-verdin-nonwifi-dev.dtb ├── imx8mp-verdin-nonwifi-ivy.dtb ├── imx8mp-verdin-nonwifi-mallow.dtb ├── imx8mp-verdin-nonwifi-yavia.dtb ├── imx8mp-verdin-wifi-dahlia.dtb ├── imx8mp-verdin-wifi-dev.dtb ├── imx8mp-verdin-wifi-ivy.dtb ├── imx8mp-verdin-wifi-mallow.dtb ├── imx8mp-verdin-wifi-yavia.dtb ├── overlays └── overlays.txt 1 directory, 13 files ------------------------------- ./ “ boot.scr ” 文件是 Linux U-Boot Distroboot 配置文件,如果定制 BSP 镜像涉及 Linux Kernel 启动参数相关配置,可以参考 这里 修改并重新生成这个文件后替换原有文件。 ./ 其他文件都是包含 Linux Kernel Image / Device-Tree Binary / Device-Tree Overlay Binary 等文件,如果定制 BSP 涉及了相关修改可以在这里替换原有文件。 ./ 修改完成所有要修改的文件后,可以通过如下命令重新压缩,如果命名不变则无需修改 image.json 文件,否则就要对应修改。 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/bootfs/ $ tar Jcf ../Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz * $ cd .. $ rm -rf bootfs/ ------------------------------- h). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz” 压缩包文件如章节 (c) 说明是 EXT4 Linux Rootfs 文件系统分区文件,请注意不同 Yocto Linux BSP 版本命名方式可能略有不同。 ./ 解压后内容如下 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/ $ mkdir rootfs $ sudo tar Jxf Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz -C rootfs/ $ cd rootfs $ tree -L 1 . ├── bin - usr/bin ├── boot ├── dev ├── etc ├── home ├── lib - usr/lib ├── media - run/media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin - usr/sbin ├── srv ├── sys ├── tmp ├── unit_tests ├── usr └── var 18 directories, 1 file ------------------------------- ./ 在这里可以进行 Linux Rootfs 相关的修改适配,比如部署应用程序以及相关运行库,配置应用程序开机自启动等,下面是几个简单示例。 ------------------------------- ### modify below default autorun systemd service file to make customized application autorun ### rootfs/lib/systemd/system/wayland-app-launch.service ... ExecStart=/usr/share/cinematicexperience-1.0/Qt5_CinematicExperience --fullscreen ... ### modify below splash picture to adapt customized splash after enabling plymouth in Yocto project ### rootfs/usr/share/plymouth/themes/spinner/watermark.png ### modify weston configuration file if needed, below for example to hide weston normal shell ### rootfs/ etc/xdg/weston/weston.ini ... shell=kiosk-shell.so ... ------------------------------- ./ 修改完成所有要修改的文件后,可以通过如下命令重新压缩,如果命名和大概文件大小不变则无需修改 image.json 文件,否则就要对应修改。 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/rootfs/ $ sudo tar Jcf ../Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz * $ cd .. $ sudo rm -rf rootfs/ ------------------------------- i). “u-boot-initial-env-sd” 如章节 (c) 说明是 U-Boot 环境变量配置文件,可以将定制需要的环境变量修改或者添加在这个文件。比如这里示例添加为了显示 Plymouth Splash 以及关闭 log 输出的环境变量定义。 ------------------------------- tdxargs = quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3’ bootdelay = 0 ------------------------------- j). 定制完成后将完整 BSP image 文件复制到 U 盘或者 SD 卡,通过模块 Toradex Easy Installer 工具安装到模块进行量产即可。 4 ). 总结 本文 基于 Toradex i.MX8MP ARM 处理器平台示例了 Yocto Linux 量产 BSP 镜像定制流程,其他平台定制思路都是基本一致的。
  • 热度 22
    2016-5-16 11:09
    2356 次阅读|
    0 个评论
    By Toradex 秦海 随着ARM平台处理能力的日益强大,越来越多的工业智能/机器人应用在ARM平台上面实现,在这个过程中不可避免的就涉及到将机器人应用开发框架移植到ARM平台来运行,因此本文就着重示例基于Openembedded环境,将ROS(Robot Operating System)编译集成到嵌入式Linux中运行。 ROS是一种为机器人应用设计的分布式处理框架,集成了大量相关库和工具,目的是为了提高机器人应用开发时代码复用率。目前ROS发布版本官方只支持Ubuntu Linux等安装,但由于在Openembedded框架下维护了meta-ros layer,使得我们可以将ROS集成到同样基于Openembedded框架的嵌入式Linux中运行。 本文所使用硬件为Toradex Colibri T20 基于nVidia Tegra2的ARM核心板配合Colibri 开发板,软件即为Toradex官方发布的基于Openembedded框架的Yocto Project兼容Linux系统。 1). 编译配置roscore a). 下载配置基本的Openembedded环境 详细的关于Toradex Openembeded配置说明请见这里,如下下载配置Opembedded 和Toradex Linux release V2.5相关meta layer数据 --------------------- $ mkdir oe-core $ cd oe-core $ repo init -u http://git.toradex.com/toradex-bsp-platform.git -b LinuxImageV2.5 $ repo sync --------------------- b). 下载meta-ros layer --------------------- $ cd oe-core/stuff $ git clone https://github.com/bmwcarit/meta-ros.git //默认head为ROS indigo,如需hydro请继续如下操作 //cd meta-ros git checkout v0.2 cd .. --------------------- c). 修改配置文件 ./ 生成相关配置文件 --------------------- $ cd oe-core $ . export --------------------- ./ 修改oe-core/build/conf/bblayers.conf --------------------- BASELAYERS ?= " \ ...... + ${TOPDIR}/../stuff/meta-ros \ " --------------------- ./ 修改oe-core/build/conf/local.conf文件 --------------------- MACHINE ?= "colibri-t20" //设备配置为colibri-t20,这里也可以改为其他产品型号 ...... + IMAGE_INSTALL_append = "roslaunch" //安装roscore --------------------- d). 编译image --------------------- bitbake -k angstrom-lxde-image --------------------- e). 部署image 编译成功后,在oe-core/build/out-glibc/deploy/colibri-t20/images目录下找到生成的image Colibri_T20_LinuxImageV2.5_xxxxxxxx.tar.bz2,然后按照这里的方法更新到Colibri T20模块上面。 f). 启动roscore环境 ./ 配置环境变量 --------------------- export ROS_ROOT=/opt/ros/ indigo export PATH=$PATH:/opt/ros/ indigo/bin export LD_LIBRARY_PATH=/opt/ros/ indigo/lib export PYTHONPATH=/opt/ros/ indigo/lib/python2.7/site-packages export ROS_MASTER_URI=http://localhost:11311 export export ROS_HOSTNAME=localhost export CMAKE_PREFIX_PATH=/opt/ros/ indigo touch /opt/ros/ indigo/.catkin --------------------- ./ 启动roscore --------------------- roscore --------------------- 2). 编译配置ros-world a). 重新修改oe-core/build/conf/local.conf文件 --------------------- ...... IMAGE_INSTALL_append = "packagegroup-ros-world"" //安装roscore 以及完整的相关package --------------------- b). 编译部署 方法和上面roscore一致,由于meta-ros问题编译前请修改oe-core /stuff/meta-ros/recipes-ros/geometry-experimental/geometry-experimental.inc --------------------- SRC_URI = "063484906d1c2f1a4ee961680e43b559" SRC_URI = "011b77bc33afea927bab2707ddda585df8de5f1fc6e387081f6bf1ea12d2323b" --------------------- 第一次编译可能会遇到一些错误,请编译退出后做如下修改 ./ oe-core_v25_ros/build/out-glibc/work/armv7at2hf-vfp-angstrom-linux-gnueabi/ 目录下面 修改所有 tf2/0.5.12-r0/geometry-0.5.12/ 和 tf2-xxx/0.5.12-r0/geometr-0.5.12/ 目录名均修改为geometry_experimental-0.5.12 ./ 修改oe-core_v25_ros/build/out-glibc/work/armv7at2hf-vfp-angstrom-linux-gnueabi/pluginlib/1.10.1-r0/build/CMakeFiles/plugin_tool.dir/link.txt --------------------- ……/arm-angstrom-linux-gnueabi-g++ -pthread –mfpu=vfpv3-d16 …… //编译器添加” –pthread”参数 --------------------- c). 后续生成部署image则和roscore一致。 3). 总结 本文着重展示了在基于Openembedded框架的嵌入式Linux上面编译运行ROC core以及相关组件的方法,具体关于ROC的使用请参考其官方网站和网上相关资料。
  • 热度 21
    2016-5-16 11:08
    1625 次阅读|
    0 个评论
    By Toradex 秦海 随着ARM平台处理能力的日益强大,越来越多的工业智能/机器人应用在ARM平台上面实现,在这个过程中不可避免的就涉及到将机器人应用开发框架移植到ARM平台来运行,因此本文就着重示例基于 Openembedded 环境,将ROS(Robot Operating System)编译集成到嵌入式Linux中运行。 ROS 是一种为机器人应用设计的分布式处理框架,集成了大量相关库和工具,目的是为了提高机器人应用开发时代码复用率。目前ROS发布版本官方只支持Ubuntu Linux等安装,但由于在Openembedded框架下维护了meta-ros layer,使得我们可以将ROS集成到同样基于Openembedded框架的嵌入式Linux中运行。 本文所使用硬件为Toradex  Colibri T20  基于nVidia Tegra2的ARM核心板配合 Colibri 开发板 ,软件即为Toradex官方发布的基于Openembedded框架的 Yocto Project 兼容 Linux 系统。 1).  编译配置 roscore a).  下载配置基本的Openembedded 环境 详细的关于Toradex Openembeded配置说明请见 这里 ,如下下载配置Opembedded 和Toradex Linux release V2.5相关meta layer数据 --------------------- $ mkdir oe-core $ cd oe-core $ repo init -u http://git.toradex.com/toradex-bsp-platform.git -b LinuxImageV2.5 $ repo sync --------------------- b).  下载meta-ros layer --------------------- $ cd oe-core/stuff $ git clone  https://github.com/bmwcarit/meta-ros.git //默认head为ROS indigo,如需hydro请继续如下操作 //cd meta-ros git checkout v0.2 cd .. --------------------- c).  修改配置文件 ./ 生成相关配置文件 --------------------- $ cd oe-core $ . export --------------------- ./ 修改oe-core/build/conf/bblayers.conf --------------------- BASELAYERS ?= " \ ...... + ${TOPDIR}/../stuff/meta-ros \ " --------------------- ./ 修改oe-core/build/conf/local.conf文件 --------------------- MACHINE ?= "colibri-t20"        //设备配置为colibri-t20,这里也可以改为其他产品型号 ...... + IMAGE_INSTALL_append = "roslaunch"   //安装roscore --------------------- d).  编译image --------------------- bitbake -k angstrom-lxde-image --------------------- e).  部署image 编译成功后,在oe-core/build/out-glibc/deploy/colibri-t20/images目录下找到生成的image Colibri_T20_LinuxImageV2.5_xxxxxxxx.tar.bz2,然后按照这里的方法更新到Colibri T20模块上面。 f).  启动roscore 环境 ./ 配置环境变量 --------------------- export ROS_ROOT=/opt/ros/ indigo export PATH=$PATH:/opt/ros/ indigo/bin export LD_LIBRARY_PATH=/opt/ros/ indigo/lib export PYTHONPATH=/opt/ros/ indigo/lib/python2.7/site-packages export ROS_MASTER_URI=http://localhost:11311 export export ROS_HOSTNAME=localhost export CMAKE_PREFIX_PATH=/opt/ros/ indigo touch /opt/ros/ indigo/.catkin --------------------- ./ 启动roscore --------------------- roscore ---------------------   2).  编译配置 ros-world a).  重新修改oe-core/build/conf/local.conf 文件 --------------------- ...... IMAGE_INSTALL_append = "packagegroup-ros-world""   //安装roscore 以及完整的相关package --------------------- b).  编译部署 方法和上面roscore一致,由于meta-ros问题编译前请修改oe-core /stuff/meta-ros/recipes-ros/geometry-experimental/geometry-experimental.inc --------------------- SRC_URI = "063484906d1c2f1a4ee961680e43b559" SRC_URI = "011b77bc33afea927bab2707ddda585df8de5f1fc6e387081f6bf1ea12d2323b" --------------------- 第一次编译可能会遇到一些错误,请编译退出后做如下修改 ./ oe-core_v25_ros/build/out-glibc/work/armv7at2hf-vfp-angstrom-linux-gnueabi/ 目录下面 修改所有 tf2/0.5.12-r0/geometry-0.5.12/  和 tf2-xxx/0.5.12-r0/geometr-0.5.12/ 目录名均修改为geometry_experimental-0.5.12 ./ 修改oe-core_v25_ros/build/out-glibc/work/armv7at2hf-vfp-angstrom-linux-gnueabi/pluginlib/1.10.1-r0/build/CMakeFiles/plugin_tool.dir/link.txt --------------------- ……/arm-angstrom-linux-gnueabi-g++ -pthread –mfpu=vfpv3-d16 ……  //编译器添加” –pthread”参数 --------------------- c).  后续生成部署image 则和roscore 一致。   3).  总结 本文着重展示了在基于Openembedded框架的嵌入式Linux上面编译运行ROC core以及相关组件的方法,具体关于ROC的使用请参考其官方网站和网上相关资料。
  • 热度 17
    2016-4-12 14:47
    1483 次阅读|
    0 个评论
    简介 随着工业发展,嵌入式设备接入网络的需求日益增多,在没有有线或者无线以太网的环境下,直接通过3G/4G Modem连接运营商网络来接入互联网不失为一个好方法,本文就着重介绍基于ARM平台的嵌入式设备在Embedded Linux下使用3G/4G Modem的方法。 目前市面上的3G/4G modem和主机的连接方式主要有串口、USB和mini-PCIE,串口模块比较传统且使用比较简单,而mini-PCIE在工业设备中目前应用还不广泛,因此本文使用USB 3G/4G modem来进行演示。 硬件准备 嵌入式平台基于 Toradex Colibri i.MX6 工业产品级ARM核心板搭配Colibri开发载板,Embedded Linux采用Toradex官方发布兼容Yocto Project 的 Linux  V2.5版本。 3G Modem使用华为 E303s WCDMA Modem,支持中国联通的3G网络 Linux Kernel 准备 关于Linux kernel源代码下载及基本编译更新操作请参考 这里 ,本文不再赘述,只简单列出操作如下: a). 下载Linux kernel源代码 b). 下载安装Toolchain,并link到 “ ~/gcc-linaro “ 目录 $ wget http://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz $ tar xvf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz $ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf gcc-linaro   c). 设置环境变量 $ export ARCH=arm $ export PATH=~/gcc-linaro/bin/:$PATH $ export CROSS_COMPILE=arm-linux-gnueabihf-   d). 配置 $ make colibri_imx6_defconfig $ make menuconfig      //添加下面列出功能 -------------------- Network device support  ---        *   PPP (point-to-point protocol) support        *     PPP BSD-Compress compression         *     PPP Deflate compression             PPP filtering        *     PPP MPPE compression (encryption)             PPP multilink support        *     PPP over Ethernet        *     PPP support for async serial ports        *     PPP support for sync tty ports   USB support  ---        *     USB Modem (CDC ACM) support   USB support  ---     *   USB Serial Converter support  ---               *   USB driver for GSM and CDMA modems --------------------   e). 重新编译kernel image $ make -j3 uImage LOADADDR=10008000 21 | tee build.log   f). 升级目标板 根据本章节开始提供的 参考 升级目标板到新的kernel image 相关软件准备 1). PPP Toradex image默认已经安装,如果其他ARM平台image也是基于Yocto/OpenEmbedded环境编译,可以在local.conf文件中添加如下选项后编译 ----------------- IMAGE_INSTALL_append = " ppp" ----------------- 2). usb-modesiwtch-2.3.0 a). 需要libusb-1.0.x,先从 这里 下载源文件并解压 b). 使用上一章节配置的ToolChain如下设置交叉编译libusb $ sudo CC="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-gcc" CXX="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-g++" ./configure --host=arm-linux-gnueabihf --prefix=/home/xxx/gcc-linaro --disable-udev $ make $ make install c). 从 这里 下载usb-modesiwtch并解压 d). 如下修改usb-modesiwtch 目录下Makefile ---------------- CC          = ~/gcc-linaro/bin/arm-linux-gnueabihf-gcc CFLAGS      += -Wall -I/home/xxx/gcc-linaro/include -L/home/xxx/gcc-linaro/lib ---------------- e).交叉编译usb-modesiwtch $ make f). 从这里下载 usb-modeswitch-data ,和上面步骤编译出的usb-modesiwtch可执行文件一起上传到目标板 配置 Modem 连接网络 目前比较新的3G/4G都支持Ethernet模式和Fallback模式,而老一些的模块只支持Fallback模式,请根据所需模块情况自行参考下面操作。 1). Ethernet 模式 a). 将E303s 3G Modem连接目标板,由于Modem上包含为了给Windows系统提供驱动而部署的存储分区,Linux默认将设备识别成USB Mass Storage设备 root@colibri-imx6:/home# lsusb Bus 001 Device 004: ID 12d1:1f01 Huawei Technologies Co., Ltd. E353/E3131 (Mass storage mode) …… b). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件 ----------------------- # Huawei E303s Ethernet Mode DefaultVendor=0x12d1 DefaultProduct=0x1f01 TargetVendor=0x12d1 TargetProduct=0x14db MessageEndPoint = "0x01" MessageContent="55534243123456780000000000000a11062000000000000100000000000000" ------------------------ c). 使用usb-modeswitch工具将modem设置为Ethernet mode root@colibri-imx6:/home# ./usb_modeswitch -c 12d1:1f01 …… root@colibri-imx6:/home# usb 1-1.1: USB disconnect, device number 4 usb 1-1.1: new high-speed USB device number 6 using ci_hdrc cdc_ether 1-1.1:1.0 eth1: register 'cdc_ether' at usb-ci_hdrc.0-1.1, CDC Ethernet Device, 58:2c:80:13:92:63   lsusb查看 root@colibri-imx6:/home# lsusb Bus 001 Device 005: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131 …… d). 查看网络,出现eth1,正确获取ip并连接到网络,下面就可以用使用以太网同样方法使用网络了 root@colibri-imx6:/home# ifconfig …… eth1      Link encap:Ethernet  HWaddr 58:2C:80:13:92:63            inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0           inet6 addr: fe80::5a2c:80ff:fe13:9263/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:37 errors:0 dropped:0 overruns:0 frame:0           TX packets:69 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000           RX bytes:6899 (6.7 KiB)  TX bytes:10381 (10.1 KiB) …… e). 验证网络连接 root@colibri-imx6:/home# ping www.baidu.com PING www.baidu.com (61.135.169.121): 56 data bytes 64 bytes from 61.135.169.121: seq=0 ttl=51 time=88.261 ms 64 bytes from 61.135.169.121: seq=1 ttl=51 time=77.998 ms 64 bytes from 61.135.169.121: seq=2 ttl=51 time=68.410 ms 64 bytes from 61.135.169.121: seq=3 ttl=51 time=68.242 ms 64 bytes from 61.135.169.121: seq=4 ttl=51 time=68.166 ms 2). Fallback 模式 有一些较老型号的2G/3G Modem只支持这个模式,无需再用usb-modeswitch转换,可以直接参考下面转换后的操作部分。 a). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件 ----------------------- # Huawei E303s Fallback Mode DefaultVendor=0x12d1 DefaultProduct=0x1f01 TargetVendor=0x12d1 TargetProduct=0x1001 MessageEndPoint = "0x01" MessageContent="55534243123456780000000000000011063000000100010000000000000000" NoDriverLoading=0 ------------------------ b). 使用usb-modeswitch工具将modem设置为Fallback mode root@colibri-imx6:/home# ./usb_modeswitch -c 12d1\:1f01 …… root@colibri-imx6:/home# usb 1-1.1: new high-speed USB device number 8 using ci_hdrc option 1-1.1:1.0: GSM modem (1-port) converter detected usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0 option 1-1.1:1.1: GSM modem (1-port) converter detected usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB1 option 1-1.1:1.2: GSM modem (1-port) converter detected usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB   lsusb 查看 root@colibri-imx6:/home# lsusb Bus 001 Device 008: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem …… c). 测试连接 root@colibri-imx6:/home# ls -l /dev/ttyUSB* crw-rw----    1 root     dialout   188,   0 Apr 11 09:49 /dev/ttyUSB0 crw-rw----    1 root     dialout   188,   1 Apr 11 09:49 /dev/ttyUSB1 crw-rw----    1 root     dialout   188,   2 Apr 11 09:49 /dev/ttyUSB2   root@colibri-imx6:/home# minicom -D /dev/ttyUSB0 ------------------ Welcome to minicom 2.7 OPTIONS: I18n Compiled on Nov  3 2015, 04:06:26. Port /dev/ttyUSB0, 09:53:44 Press CTRL-A Z for help on special keys   AT OK -------------------- d). 编写ppp连接配置文件wcdma, wcdma-chat-connect和wcdma-chat-disconnect root@colibri-imx6:/etc/ppp/peers# vi wcdma ----------------- nodetach lock /dev/ttyUSB0 115200 user "card" password "card" crtscts #hide-password show-password usepeerdns noauth noipdefault novj novjccomp noccp defaultroute ipcp-accept-local ipcp-accept-remote connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect' disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect' ----------------------   root@colibri-imx6:/etc/ppp/peers# vi wcdma-chat-connect -------------------- ABORT "BUSY" ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "ERROR" ABORT "NO ANSWER" TIMEOUT 120 "" AT OK \rATZ OK \rAT+CGDCONT=1,"IP","3gnet",,0,0 OK-AT-OK ATDT*99# CONNECT \d\c --------------------------   root@colibri-imx6:/etc/ppp/peers# vi wcdma-chat-disconnect ----------------------- ABORT "ERROR" ABORT "NO DIALTONE" SAY "\NSending break to the modem\n" ""\k" ""+++ATH" SAY "\nGood bay\n" --------------------------- e). 连接网络 root@colibri-imx6:/etc/ppp/peers# pppd call wcdma …… ATDT*99#^M^M CONNECT  -- got it   send (\d) Serial connection established. Using interface ppp0 Connect: ppp0 -- /dev/ttyUSB0 CHAP authentication succeeded: Welcome!! CHAP authentication succeeded Could not determine remote IP address: defaulting to 10.64.64.64 local  IP address 10.91.228.253 remote IP address 10.64.64.64 primary   DNS address 221.12.1.227 secondary DNS address 221.12.33.227   查看网络状态 root@colibri-imx6:/etc/ppp/peers# ifconfig …… ppp0      Link encap:Point-to-Point Protocol            inet addr:10.23.107.61  P-t-P:10.64.64.64  Mask:255.255.255.255           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1           RX packets:6 errors:0 dropped:0 overruns:0 frame:0           TX packets:6 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:3           RX bytes:84 (84.0 B)  TX bytes:102 (102.0 B) f). 测试网络 root@colibri-imx6:/etc/ppp/peers# echo nameserver 221.12.1.227 /etc/resolv.conf                 //设置DNS服务器 root@colibri-imx6:/etc/ppp/peers# ping www.baidu.com PING www.baidu.com (61.135.169.121): 56 data bytes 64 bytes from 61.135.169.121: seq=0 ttl=52 time=218.477 ms 64 bytes from 61.135.169.121: seq=1 ttl=52 time=68.066 ms 64 bytes from 61.135.169.121: seq=2 ttl=52 time=107.773 ms 64 bytes from 61.135.169.121: seq=3 ttl=52 time=77.604 ms 64 bytes from 61.135.169.121: seq=4 ttl=52 time=77.339 ms   总结 根据上述两种模式的测试结果,第一种Ethernet mode相对速度要更稳定一些,因此对于支持两种模式的modem更建议采用Ethernet mode;另外串口modem使用配置也可以参考Fallback mode。本文虽以E303s为例,但其他3G/4G Modem的配置也是类似,只是需要确定对应模式的Vendor ID,Product ID和Message。 参考文档 https://www.toradex.cn/zh_cn/computer-on-modules/colibri-arm-family/nxp-freescale-imx6 https://www.toradex.cn/zh_cn/products/carrier-board/colibri-evaluation-carrier-board http://developer.toradex.com/software/linux/linux-software http://www.draisberghof.de/usb_modeswitch/ http://www.cnblogs.com/ziqiuqiandao/archive/2013/06/06/3120972.html
  • 热度 28
    2016-4-12 14:45
    1432 次阅读|
    0 个评论
    简介 随着工业发展,嵌入式设备接入网络的需求日益增多,在没有有线或者无线以太网的环境下,直接通过3G/4G Modem连接运营商网络来接入互联网不失为一个好方法,本文就着重介绍基于ARM平台的嵌入式设备在Embedded Linux下使用3G/4G Modem的方法。 目前市面上的3G/4G modem和主机的连接方式主要有串口、USB和mini-PCIE,串口模块比较传统且使用比较简单,而mini-PCIE在工业设备中目前应用还不广泛,因此本文使用USB 3G/4G modem来进行演示。 硬件准备 嵌入式平台基于 Toradex Colibri i.MX6 工业产品级ARM核心板搭配Colibri开发载板,Embedded Linux采用Toradex官方发布兼容Yocto Project 的 Linux  V2.5版本。 3G Modem使用华为 E303s WCDMA Modem,支持中国联通的3G网络 Linux Kernel 准备 关于Linux kernel源代码下载及基本编译更新操作请参考 这里 ,本文不再赘述,只简单列出操作如下: a). 下载Linux kernel源代码 b). 下载安装Toolchain,并link到 “ ~/gcc-linaro “ 目录 $ wget http://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz $ tar xvf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz $ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf gcc-linaro   c). 设置环境变量 $ export ARCH=arm $ export PATH=~/gcc-linaro/bin/:$PATH $ export CROSS_COMPILE=arm-linux-gnueabihf-   d). 配置 $ make colibri_imx6_defconfig $ make menuconfig      //添加下面列出功能 -------------------- Network device support  ---        *   PPP (point-to-point protocol) support        *     PPP BSD-Compress compression         *     PPP Deflate compression             PPP filtering        *     PPP MPPE compression (encryption)             PPP multilink support        *     PPP over Ethernet        *     PPP support for async serial ports        *     PPP support for sync tty ports   USB support  ---        *     USB Modem (CDC ACM) support   USB support  ---     *   USB Serial Converter support  ---               *   USB driver for GSM and CDMA modems --------------------   e). 重新编译kernel image $ make -j3 uImage LOADADDR=10008000 21 | tee build.log   f). 升级目标板 根据本章节开始提供的 参考 升级目标板到新的kernel image 相关软件准备 1). PPP Toradex image默认已经安装,如果其他ARM平台image也是基于Yocto/OpenEmbedded环境编译,可以在local.conf文件中添加如下选项后编译 ----------------- IMAGE_INSTALL_append = " ppp" ----------------- 2). usb-modesiwtch-2.3.0 a). 需要libusb-1.0.x,先从 这里 下载源文件并解压 b). 使用上一章节配置的ToolChain如下设置交叉编译libusb $ sudo CC="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-gcc" CXX="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-g++" ./configure --host=arm-linux-gnueabihf --prefix=/home/xxx/gcc-linaro --disable-udev $ make $ make install c). 从 这里 下载usb-modesiwtch并解压 d). 如下修改usb-modesiwtch 目录下Makefile ---------------- CC          = ~/gcc-linaro/bin/arm-linux-gnueabihf-gcc CFLAGS      += -Wall -I/home/xxx/gcc-linaro/include -L/home/xxx/gcc-linaro/lib ---------------- e).交叉编译usb-modesiwtch $ make f). 从这里下载 usb-modeswitch-data ,和上面步骤编译出的usb-modesiwtch可执行文件一起上传到目标板 配置 Modem 连接网络 目前比较新的3G/4G都支持Ethernet模式和Fallback模式,而老一些的模块只支持Fallback模式,请根据所需模块情况自行参考下面操作。 1). Ethernet 模式 a). 将E303s 3G Modem连接目标板,由于Modem上包含为了给Windows系统提供驱动而部署的存储分区,Linux默认将设备识别成USB Mass Storage设备 root@colibri-imx6:/home# lsusb Bus 001 Device 004: ID 12d1:1f01 Huawei Technologies Co., Ltd. E353/E3131 (Mass storage mode) …… b). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件 ----------------------- # Huawei E303s Ethernet Mode DefaultVendor=0x12d1 DefaultProduct=0x1f01 TargetVendor=0x12d1 TargetProduct=0x14db MessageEndPoint = "0x01" MessageContent="55534243123456780000000000000a11062000000000000100000000000000" ------------------------ c). 使用usb-modeswitch工具将modem设置为Ethernet mode root@colibri-imx6:/home# ./usb_modeswitch -c 12d1:1f01 …… root@colibri-imx6:/home# usb 1-1.1: USB disconnect, device number 4 usb 1-1.1: new high-speed USB device number 6 using ci_hdrc cdc_ether 1-1.1:1.0 eth1: register 'cdc_ether' at usb-ci_hdrc.0-1.1, CDC Ethernet Device, 58:2c:80:13:92:63   lsusb查看 root@colibri-imx6:/home# lsusb Bus 001 Device 005: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131 …… d). 查看网络,出现eth1,正确获取ip并连接到网络,下面就可以用使用以太网同样方法使用网络了 root@colibri-imx6:/home# ifconfig …… eth1      Link encap:Ethernet  HWaddr 58:2C:80:13:92:63            inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0           inet6 addr: fe80::5a2c:80ff:fe13:9263/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:37 errors:0 dropped:0 overruns:0 frame:0           TX packets:69 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000           RX bytes:6899 (6.7 KiB)  TX bytes:10381 (10.1 KiB) …… e). 验证网络连接 root@colibri-imx6:/home# ping www.baidu.com PING www.baidu.com (61.135.169.121): 56 data bytes 64 bytes from 61.135.169.121: seq=0 ttl=51 time=88.261 ms 64 bytes from 61.135.169.121: seq=1 ttl=51 time=77.998 ms 64 bytes from 61.135.169.121: seq=2 ttl=51 time=68.410 ms 64 bytes from 61.135.169.121: seq=3 ttl=51 time=68.242 ms 64 bytes from 61.135.169.121: seq=4 ttl=51 time=68.166 ms 2). Fallback 模式 有一些较老型号的2G/3G Modem只支持这个模式,无需再用usb-modeswitch转换,可以直接参考下面转换后的操作部分。 a). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件 ----------------------- # Huawei E303s Fallback Mode DefaultVendor=0x12d1 DefaultProduct=0x1f01 TargetVendor=0x12d1 TargetProduct=0x1001 MessageEndPoint = "0x01" MessageContent="55534243123456780000000000000011063000000100010000000000000000" NoDriverLoading=0 ------------------------ b). 使用usb-modeswitch工具将modem设置为Fallback mode root@colibri-imx6:/home# ./usb_modeswitch -c 12d1\:1f01 …… root@colibri-imx6:/home# usb 1-1.1: new high-speed USB device number 8 using ci_hdrc option 1-1.1:1.0: GSM modem (1-port) converter detected usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0 option 1-1.1:1.1: GSM modem (1-port) converter detected usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB1 option 1-1.1:1.2: GSM modem (1-port) converter detected usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB   lsusb 查看 root@colibri-imx6:/home# lsusb Bus 001 Device 008: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem …… c). 测试连接 root@colibri-imx6:/home# ls -l /dev/ttyUSB* crw-rw----    1 root     dialout   188,   0 Apr 11 09:49 /dev/ttyUSB0 crw-rw----    1 root     dialout   188,   1 Apr 11 09:49 /dev/ttyUSB1 crw-rw----    1 root     dialout   188,   2 Apr 11 09:49 /dev/ttyUSB2   root@colibri-imx6:/home# minicom -D /dev/ttyUSB0 ------------------ Welcome to minicom 2.7 OPTIONS: I18n Compiled on Nov  3 2015, 04:06:26. Port /dev/ttyUSB0, 09:53:44 Press CTRL-A Z for help on special keys   AT OK -------------------- d). 编写ppp连接配置文件wcdma, wcdma-chat-connect和wcdma-chat-disconnect root@colibri-imx6:/etc/ppp/peers# vi wcdma ----------------- nodetach lock /dev/ttyUSB0 115200 user "card" password "card" crtscts #hide-password show-password usepeerdns noauth noipdefault novj novjccomp noccp defaultroute ipcp-accept-local ipcp-accept-remote connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect' disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect' ----------------------   root@colibri-imx6:/etc/ppp/peers# vi wcdma-chat-connect -------------------- ABORT "BUSY" ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "ERROR" ABORT "NO ANSWER" TIMEOUT 120 "" AT OK \rATZ OK \rAT+CGDCONT=1,"IP","3gnet",,0,0 OK-AT-OK ATDT*99# CONNECT \d\c --------------------------   root@colibri-imx6:/etc/ppp/peers# vi wcdma-chat-disconnect ----------------------- ABORT "ERROR" ABORT "NO DIALTONE" SAY "\NSending break to the modem\n" ""\k" ""+++ATH" SAY "\nGood bay\n" --------------------------- e). 连接网络 root@colibri-imx6:/etc/ppp/peers# pppd call wcdma …… ATDT*99#^M^M CONNECT  -- got it   send (\d) Serial connection established. Using interface ppp0 Connect: ppp0 -- /dev/ttyUSB0 CHAP authentication succeeded: Welcome!! CHAP authentication succeeded Could not determine remote IP address: defaulting to 10.64.64.64 local  IP address 10.91.228.253 remote IP address 10.64.64.64 primary   DNS address 221.12.1.227 secondary DNS address 221.12.33.227   查看网络状态 root@colibri-imx6:/etc/ppp/peers# ifconfig …… ppp0      Link encap:Point-to-Point Protocol            inet addr:10.23.107.61  P-t-P:10.64.64.64  Mask:255.255.255.255           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1           RX packets:6 errors:0 dropped:0 overruns:0 frame:0           TX packets:6 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:3           RX bytes:84 (84.0 B)  TX bytes:102 (102.0 B) f). 测试网络 root@colibri-imx6:/etc/ppp/peers# echo nameserver 221.12.1.227 /etc/resolv.conf                 //设置DNS服务器 root@colibri-imx6:/etc/ppp/peers# ping www.baidu.com PING www.baidu.com (61.135.169.121): 56 data bytes 64 bytes from 61.135.169.121: seq=0 ttl=52 time=218.477 ms 64 bytes from 61.135.169.121: seq=1 ttl=52 time=68.066 ms 64 bytes from 61.135.169.121: seq=2 ttl=52 time=107.773 ms 64 bytes from 61.135.169.121: seq=3 ttl=52 time=77.604 ms 64 bytes from 61.135.169.121: seq=4 ttl=52 time=77.339 ms   总结 根据上述两种模式的测试结果,第一种Ethernet mode相对速度要更稳定一些,因此对于支持两种模式的modem更建议采用Ethernet mode;另外串口modem使用配置也可以参考Fallback mode。本文虽以E303s为例,但其他3G/4G Modem的配置也是类似,只是需要确定对应模式的Vendor ID,Product ID和Message。 参考文档 https://www.toradex.cn/zh_cn/computer-on-modules/colibri-arm-family/nxp-freescale-imx6 https://www.toradex.cn/zh_cn/products/carrier-board/colibri-evaluation-carrier-board http://developer.toradex.com/software/linux/linux-software http://www.draisberghof.de/usb_modeswitch/ http://www.cnblogs.com/ziqiuqiandao/archive/2013/06/06/3120972.html
相关资源