砂舞的玩笑

个性签名:更多开发板详情了解哦

1.https://arm-board.taobao.com
2.www.topeetboard.com
Q: 2551456065

  • 2019-08-21
  • 回复了主题帖: iTOP-4418开发板-QtE5.7系统-10.1寸屏触摸

  • 2019-08-19
  • 发表了主题帖: 迅为-iMX6开发板-设备树驱动-以module的方式编译驱动

    本帖最后由 砂舞的玩笑 于 2019-8-19 11:10 编辑 内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动。本文档介绍如何以 模块的方式编译内核驱动。 以 module 的方式编译驱动,需要以下几个部分: 1 内核成功编译过; 2 找到内核的 arm 编译器; 3 编译简单驱动; 4 编译简单的 Makefile 文件,Makefile 文件中需要指向内核源码目录(成功编译过的内 核源码目录); 和文档在一起的有“Makefile”、c 文件和 ko 文件,大家可以用来测试。 要动态的编译内核,首先需要将内核源码编译通过,内核的编译请参考使用手册第五章。 1 内核和编译器路径 本节介绍内核路径、编译器路径。无论是 Qt 和 Ubuntu 的内核源码,都是在 android 源 码包中,所以必须先解压 android 源码到 Ubuntu14.04 中。 如下图所示,作者的 android 源码在“/home/iMX6Q/iTOP-iMX6_android6.0.1”目录 下,内核源码在其中的“kernel_imx”目录下。 进入“kernel_imx”目录,查看“build_android_kernel.sh”中的脚本文件,如下图所 示。 如上图所示,我们可以得到一些信息,在后面编译内核模块的时候,需要设置编译目标平 台为 arm,“export ARCH=arm”; 编译器的路径为“$(pwd)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.9/bin/arm-linux-androideabi-”。理论上,应该使用这个编译器,但是实际上以 modules 的方式编译内核驱动的时候,使用这个编译器,是无法编译的!! 应该使用“../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-”这个编译器 才行,如下图所示。 编译器路径为内核源码目录对应的../prebuilts/gcc/linux-x86/arm/arm-eabi- 4.8/bin/arm-eabi-”,这是作者测试出来的,作者没有太多时间深入研究编译脚本,但是这 个编译器是可以的。前面红色部分介绍的编译器,会提示报错,对于这个报错,飞思卡尔官方 给出的是简单的回复“你使用了 android 的编译器”,没有提供更多的解释,也没有提示方 法,不过作者测试了几个内核驱动,都是可以正常 insmod 和 rmmod 的。 2 Makefile 和测试驱动源码以及编译 作者在“/home/imx6”目录下新建一个“imx_driver_modules”目录,将要编译的驱 动和 Makefile 文件放到这个目录下。 2.1 Makefile Makefile 脚本文件: 脚本中: 第一行:obj-m += iTOP_IMX6_treedriver_hello.o 表示编译的源文件为 iTOP_IMX6_treedriver_hello.c,如果源文件名有变化,则需要修改成对应的。 第二行:KDIR 参数指向对应的内核源码目录。作者的内核源码是在 /home/iMX6Q/iTOP-iMX6_android6.0.1/kernel_imxx 目录下,用户要根据自己的具体情况 来修改。 第三行:PWD ?= $(shell pwd)表示将当前目录的路径赋值给 PWD 变量,也就是 /home/imx6_tree_driver/iTOP_IMX6_treedriver_hello。作者将会把 Makefile 文件和驱动 源码放到这个目录下编译。 第五行:其中 make -C $(KDIR) M=$(PWD) modules,表示将当前目录下的文件编译 为模块,并且制定了内核源码的路径; 其中 ARCH=arm 表示设置目标 CPU 类别为 arm,也就是编译的依赖内核和驱动模块目 标 CPU 为 ARM; 其中 CROSS_COMPILE=$(KDIR)/../prebuilts/gcc/linux-x86/arm/arm-eabi- 4.8/bin/arm-eabi- ,这里的路径,指向内核编译器的路径。 2.2 简单驱动源码 驱动文件名称为:iTOP_IMX6_treedriver_hello.c,源码如下: 驱动源码只有基本的入口和出口函数。加载和卸载的时候分别打印“Hello World enter!”和“Hello world exit!”。 2.3 编译 将源码和 Makefile 文件拷贝到 Ubuntu14 系统下。 使用命令“make”,如下图所示,可以看到有“iTOP_IMX6_treedriver_hello.ko”文件 生成。 使用命令“make clean”,可以删除中间文件。 3 模块编译常见问题 在以模块的方式编译驱动的过程中,新手可能会以下问题。 1.内核源码没有编译或者内核源码路径设置不正确。 如果内核源码没有编译,那么模块将会提示缺少库之类的错误;如果路径设置不正确,会 提示找不到内核。 2.源码和 Makefile 文件在 Windows 下编写,然后拷贝到 Ubuntu 上,由于编辑器不同 导致转码错误。 这种错误比较容易解决,Make 编译之后,系统会提示 Makefile 或者驱动文件具体某一 行出现问题。使用 vim 编辑器打开查看一下,就能找出一些乱码,使用 vim 编辑器修正一下 再编译即可。 4 模块加载和卸载 作者这里使用最小 linux 系统来测试模块的加载和卸载,最小系统在使用手册第十三章有 介绍。在编译模块前,内核源码必须要编译通过,作者这里是在最小系统是加载模块,那么内 核源码也必须编译为 qt 的内核(最小系统使用的是 qt 的内核),否则是无法加载的。 如下图所示,将驱动模块拷贝到开发板(作者采用的是 nfs 共享目录的方式,关于 nfs 大 家可以参考群共享中 nfs 相关的文档,设备树和非设备的 Ubuntu 都通用。也可以用 tf 卡或 者 U 盘)。 然后使用命令“insmod iTOP_IMX6_treedriver_hello.ko”加载驱动模块,如下图示, 打印出“Hello World enter!”,表明模块驱动加载成功。 接着使用命令“rmmod iTOP_IMX6_treedriver_hello”卸载模块,如下图所示,发现提 示没有目录 4.1.15,这里我们新建“/lib/modules/4.1.15”。 如下图所示,使用命令“mkdir /lib/modules/4.1.15”新建目录,再次使用命令 “rmmod iTOP_IMX6_treedriver_helloello”卸载驱动模块。 发现打印信息“Hello world exit!”,模块卸载成功。 只要重新烧写系统,这些新建目录只需要建立一次即可。

  • 2019-08-16
  • 发表了主题帖: 嵌入式系统学习开发概述_从未这么简单过_冲冲冲鸭

    为初学者精心录制的整套视频教程,全部免费 随IT技术发展而不断增添的视频教程仍然免费 一支有经验的工程师团队会始终成为你的后盾 最新的Android 4.0.3 /Android 4.4系统丨Linux-QT5.7系统丨Ubuntu12.04系统 4412开发板学习步骤: 首先要看一下光盘里的用户使用手册。 然后根据手册和视频安装开发环境,并编译和烧写系统。 接着开始Linux应用和驱动的编写实验,最后是Android系统开发。

  • 2019-08-15
  • 发表了主题帖: 我有一个实现HMI触摸屏的资源【4418开发平台】降d成本

    科普一下HMI 人机接口是指人与计算机之间建立联系、交换信息的输入/输出设备的接口,这些设备包括键盘、显示器、打印机、鼠标等。人机交互设备是计算机系统中最基本的设备之一,是人和计算机之间建立联系、交换信息的外部设备,常见的人机交互设备可分为输入设备和输出设备两类。 在未来的作用 物联网这个由智能互联设备组成的系统正在将各个点连在一起。物联网将通过5G实现飞跃,通过提供具有超高可靠性、低延迟和更大容量移动宽带,实现大规模连接。未来,物联网设计将提供现实世界与数字世界连接和交互的机会。电子元件和电子系统正在高度沉浸和强大感官和认知体验提供有力支持。 技术变革将保障连接并支持机器、系统和人机界面之间的通信,同时通过主动调整流程来优化资源,从而提高效率。工业4.0的实时联网将提供“即时”更改的灵活性,从而加快生产速度,尽量降低延迟和停机时间,优化生产计划。 HMI的未来是什么?它可能发展成一种更直接的个人认知界面体验 iTOP-4418开发板 支持动态调频,AXP228电源管理,低功耗运行 系统支持:Android4.4/5.1.1、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04 内存:1GB DDR3(2GB)存储:16GB存储EMMC;4MB的EEPROM用来存储关键数据 底板:125mm * 190mm;核心板:50mm*60mm CPU:四核 Cortex-A9-八核 Cortex-A53 板载: 4G、GPS、WIFI蓝牙、千兆以太网、AD、CAMERA接口、MIPI接口、CAN/RS485接口等 资料:原理图、底板的PCB、驱动程序源码、芯片和LCD数据、开发环境、使用手册+++网盘的资料(光盘+百度云)

  • 2019-08-14
  • 发表了主题帖: 来得及吗?产品研发现在做,开发板怎么选择chao值!

    没有疯,也不晚。只是,缺少适合的研发平台。 同样是产品研发,或者,你还可以...... 有案例库,真的很爽。 iTOP-4418开发板 支持动态调频,AXP228电源管理,低功耗运行 系统支持:Android4.4/5.1.1、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04 内存:1GB DDR3(2GB)存储:16GB存储EMMC;4MB的EEPROM用来存储关键数据 底板:125mm * 190mm;核心板:50mm*60mm CPU:四核 Cortex-A9-八核 Cortex-A53 板载 : 4G、GPS、WIFI蓝牙、千兆以太网、AD、CAMERA接口、MIPI接口、CAN/RS485接口等 资料的话,原理图、底板的PCB、驱动程序源码、芯片和LCD数据、开发环境、使用手册+++网盘的资料(光盘+百度云)

  • 2019-08-13
  • 发表了主题帖: iTOP-iMX6开发板-设备树内核-IO扩展配置和测试01

    用户设计产品的时候,开发板上的一些功能可能不需要,同时需要更多的 GPIO。 iMX6 上很多 IO 都是可以复用的,可以配置为 GPIO,这里以 camera 的 IO 为例,将其 中部分 camera 配置为 GPIO 模式。 1 去掉 ov5640 驱动 首先要将 ov5640 驱动去掉。 进入 menuconfig 配置界面,选择并进入“Device Drivers --->”,如下图所示。 选择并进入“Multimedia support --->”,如下图所示。 选择并进入“ V4L platform devices ---> ”,如下图所示。 选择并进入“MXC Video For Linux Video Capture”下的“MXC Camera/V4L2 PRP Features support --->”,如下图所示。 如下图所示,去掉“OmniVision ov5640 camera support ”,保存配置退出。 保存配置,覆盖掉 arch/arm/configs 下对应的配置文件。 驱动配置完成,还需要修改设备树文件。 2 IO 资源整理 IO 资源整理指的是,通过管脚的网络标号和 PIN 脚编号,整理出设备树需要的 GPIO 宏 定义和 nr(管脚编号,用于测试)。 具体方法参考“iTOP-iMX6-设备树内核-IO 配置分析文档_V1.0”文档,这里作者只给出 整理出的结果,如下图所示。 上图的文字版在文档压缩包“camera 的 IO 扩展资源”文本中。 3 设备树配置 需要修改设备树文件“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”。 首先将 camera 的 IO 有关的设备树文件注释掉, 如下图所示,将设备注册 GPIO 部分注释掉 如下图所示,将 camera 的 GPIO 初始化配置注释掉 如下图所示,添加我们要用到的 GPIO 配置。 至此,所有的修改完成,保存,重新编译烧写到开发板。 4 sys 测试 烧写到开发板之后,使用 sys 的方式测试 IO。 以 camera 的 pin5 脚为例,nr 是 17。 使用以下命令测试: echo 17 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio17/direction echo 1 > /sys/class/gpio/gpio17/value ---> 写高电平 万用表测试是高电平 echo 0 > /sys/class/gpio/gpio17/value ---> 写低电平 万用表测试是低电平。 本文档主要介绍 iTOP-iMX6 开发板的使用方法,旨在帮助用户快速掌握该产品的应用特 点,通过对开发板进行后续软硬件开发,衍生出符合特定需求的应用系统。

  • 2019-08-12
  • 发表了主题帖: 嵌入式开挂式学习_自学4412开发平台_能量满满

    最新的Android 4.0.3 /Android 4.4系统丨Linux-QT5.7系统丨Ubuntu12.04系统 教你学懂嵌入式,我们是认真的!学习步骤,由浅入深,结合文档并配合视频教程: 范读用户使用手册→结合视频,按步骤安装开发坏境→学会Linux基本命令→编译并烧写系统方法→Linux应用程序设计→Linux驱动开发入门及进阶→Android架构学习→Android应用程序初探→Android驱动入门→项目实战→终结 为初学者精心录制的整套视频教程,全部免费 随IT技术发展而不断增添的视频教程仍然免费 一支有经验的工程师团队会始终成为你的后盾

  • 回复了主题帖: iTOP-4412开发板基于Linux-C测试程序的编译和运行

  • 2019-08-09
  • 发表了主题帖: iTOP-iMX6开发板-设备树内核-注册驱动例程

    本文档主要讲解在迅为iTOP-iMX6Q/D/PLUS 开发板的设备树内核(4.1.15)源码中,设备树注册 驱动和非设备树的类似。 1 注册驱动源码分析 设备树的内核驱动中,platform_driver 结构中增加了“of_match_table”,在驱动源码 中需要增加对应变量,驱动注册部分变化的部分如下。 以上代码中,platform_driver_register 调用 register_driver,如果设备名称和驱动名称 相同,即可进入 probe。 驱动例程中 DRIVER_NAME 为“test_dev_name”。 在“iTOP-iMX6-设备树内核-注册设备例程”文档中,在设备树中我们已经注册了 “test_dev_name”设备。 2 注册驱动测试 将驱动编译为 ko 文件,insmod 加载之后应该打印“register_init”和“register_probe init”;rmmod 卸载之后打印“register_exit”和“Goodbye, curel world, remove”。 如下图所示,使用命令“ insmod iTOP_IMX6_registerdriver.ko”加载驱动,使用命令 “rmmod iTOP_IMX6_registerdriver”卸载驱动。 北京迅为电子有限公司致力于嵌入式软硬件设计,是高端开发平台以及移动设备方案提供 商;基于多年的技术积累,在工控、仪表、教育、医疗、车载等领域通过 OEM/ODM 方式为 客户创造价值。 iTOP-iMX6开发板是迅为电子基于飞思卡尔最新四核处理器 iMX6 研制的一款实验开发 平台,可以通过该产品评估 iMX6 处理器相关性能,并以此为基础开发出用户需要的特定产 品。 本文档主要介绍 iTOP-iMX6 开发板的使用方法,旨在帮助用户快速掌握该产品的应用特 点,通过对开发板进行后续软硬件开发,衍生出符合特定需求的应用系统。 此内容由EEWORLD论坛网友砂舞的玩笑原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-08-07
  • 发表了主题帖: iTOP-4418/6818开发板_QT_HDMI显示

    1.首先请确认下光盘资料的日期(只有20171120及以后更新的光盘支持QT HDMI显示),然后拷贝iTOP-4418开发板文件夹下的nxp-hdmi-context.c文件到内核目录:kernel/arch/arm/mach-s5p4418/soc/hdmi/,如下图: 拷贝6818文件夹下的nxp-hdmi-context.c文件到内核目录:kernel/arch/arm/mach-s5p6818/soc/hdmi/,如下图: 2.进入源码所在的目录,如下图: 3.然后进入内核目录,如下图: 4.然后拷贝qt的配置文件生成.config(这里以4418核心板+网口芯片RTL8211的底板为例,如果是6818.需要拷贝6818支持qt的文件:config_for_iTOP6818_linux),如下图: 5.设置环境变量:export ARCH=arm,如下图: 6.然后输入内核配置命令make menuconfig,进入到内核配置界面,如下图: 7.进入“Device Drivers”->"Multimedia support"->"Nexell V4L2 Devices"->"Nexell OUT interface",如下图: 8.然后取消“Enable out HDMI”,如下图: 9.然后返回到内核配置的首界面,如下图: \ 10.然后进入“Device Drivers”->"Graphics support"->"Nexell Graphics",如下图: 11.然后取消“LCD”,“LVDS”,选中“HDMI”,如下图: 12.最后退出并保存所有配置,如下图: 13.然后回到源码根目录下,执行qt编译脚本“./build_android.sh qt”,生成boot.img文件即可。

  • 2019-08-06
  • 发表了主题帖: 迅为干货|静态库和动态库的制作和使用-IMX6开发板新增ubuntu16_安卓6.0_新增Yocto_...

    因为我们在写代码的时候,不可能每个代码都要重新开始写,我们可以使用别人写好的,成熟的代码,所以,库的存在就变得非常有意义。linux的下的库主要有俩种,一个是动态库,一个是静态库。 1简介       将一个程序编译成可执行程序要经过预编译,编译,汇编,和链接这个几个步骤,而动态库和静态库的主要区别就是在链接阶段怎么处理这些库。        静态库在程序编译的时候会被链接到目标文件当中,在程序运行的时候不在需要这些库,程序移植方便,但是更新会很麻烦,可执行文件比较大,浪费空间,而动态库在编译的时候并不会链接到目标文件中去,所以程序在运行的时候还需要这些动态库的存在。可执行程序比较小,但是程序在运行的过程中必须提供相应的库。   2实验操作  实验一:静态库的制作和使用 实验目标:制作一个静态库并使用。 实验内容: 静态库的制作主要有以下几个步骤: 1,生成目标文件。 2,使用ar命令创建静态函数库。 命名规则:  必须是lib[库的名字].a,括号里面的为你的库的名字,扩展名为.a 使用方法: 在使用gcc编译的时候加上参数-L 和你的库的路径和你要链接的库。 我们创建一个文本并输入以下代码。 将这个文件放进ubuntu中。生成目标文件,输入以下命令: 输入以下命令创建静态库, -c是创建的意思,-是替换的意思。 在当前目录创建一个文件输入以下代码: 接着在ubuntu上编译这个程序,编译的时候链接我们上面那生成的库,输入以下命令: 实验二:动态库的制作和使用 实验目标:制作一个动态库并使用。 实验内容: 动态库的制作主要有以下几个步骤: 1,生成目标文件。 2,生成动态库。 命名规则:  lib[库的名字].so,括号里面的为你的库的名字,扩展名为.so 使用方法: 将生成的库放在/usr/lib 或者 /lib下面去。 在实验一的lib.c基础上,输入下图命令,-fPIC表示与源码位置无关,-shared 生成动态库 编译test.c。输入以下命令 运行可执行文件test发现不可以运行成功,提示如下: 因为Linux会默认在/usr/lib 或者 /lib下面找,但是我们的库并不在这俩个路径下面,我们将我们生成的库拷贝到/usr/lib下面去,然后我们在运行我们程序。 运行程序: 3实验分析 通过实验我们可以发现,使用动态库编译生成的可执行文件要比静态库的要小。 使用动态库: 使用静态库: 另外我们在编译的时候参数-L 是用来指定库的搜索路径,-l是用来指定要链接的库的名字. 这个库的名称是什么,就是我们起的库的名字,如下: 开发利器:迅为IMX6开发板 新增ubuntu16,安卓6.0,新增Yocto,新增设备树相关历程

  • 2019-08-05
  • 发表了主题帖: 2019学习嵌入式开发-应该怎么规划学习路线

    对于嵌入式的学习来说,你要掌握好方法最重要,不能漫无目的的学习,那样就会使你学的很迷茫,所以学习嵌入式在此之前 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:  (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9)  (2)必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)  (3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 从事嵌入式软件开发的缺点是:  (1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。  (2)这方面的企业数量要远少于企业计算类企业。  (3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。  (4)平台依托强,换平台比较辛苦。 方法步骤:  1、基础知识:  目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。  科目:数字电路、计算机组成原理、嵌入式微处理器结构。  汇编语言、C/C++、编译原理、离散数学。  数据结构和算法、操作系统、软件工程、网络、数据库。  方法:虽科目众多,但都是较简单的基础。不一定全学,可根据需要选修。  主攻书籍:the c++ programming language(一直没时间读)、数据结构-C2。 2、学习linux:  目的:深入掌握linux系统。  方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看《深》,那主讲原理。看几遍后,看《情景分析》,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。  主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。 3、学习嵌入式linux:  目的:掌握嵌入式处理器其及系统。  方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。  (2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。  (3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。  主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。 4、深入学习-实践,动手能力太重要,iTOP4412开发板-编译和烧写系统。接着开始Linux应用和驱动的编写实验,最后是Android系统开发   视频教程(迅为一线研发工程师录制-不断更新) 第一部分  迅为电子开发板入门视频  (数量:53节) 第二部分  Linux系统编程  (数量:72节) 第三部分  iTOP-4412开发板硬件设计指导视频  (数量:4节) 第四部分  Android应用程序视频  (数量:12节) 第五部分  Android应用教程2015  (数量:11节) 第六部分  裸机程序实验文档以及工具文件  第七部分  Linux-x86-Qt5.3.2以及QtE4.7.1应用视频  (数量:5节)   第八部分  Linux系统编程  (数量:45节) 第九部分   迅为电子Java视频教程  (数量:14节) 第十部分  uboot教程(数量:5节) 第十一部分  实战视频教程(数量:14节)   项目实战(全开源) 1、手机远程控制开发板  2、门禁系统 3、WEB服务及远程控制 4、GPS定位系统  5、智能网关 6、机顶盒

  • 2019-08-02
  • 发表了主题帖: iTOP-iMX6开发板-设备树内核-注册设备例程

    本文档主要讲解在 iMX6Q/D/PLUS 开发板的设备树内核(4.1.15)源码中,注册设备需 要在设备树文件“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”中添加设备树语句,主要是 添加设备名称和添加使能。 1 注册设备 打开内核源码中的设备树文件“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”,在 “itop_max485_ctl”之后添加以下代码 添加完成之后如下图所示。 以上添加代码,“test_dev”是设备树节点的名称;属性“compatible”的值是 “test_dev_name”,也就是设备名称;“status = "okay";”表明这个设备树节点是使能 的,设备树初始化的时候需要使能。 2 注册设备测试 修改完成之后,重新编译烧写到开发板中,如下图所示,在开发板串口控制台下,使用命 令“ls sys/bus/platform/devices/test_dev/”。 在“sys/bus/platform/devices”中生成了设备树的节点“test_dev/”,节点下有属性 值。使用命令“cd sys/bus/platform/devices/test_dev/”进入节点目录。 使用命令“cat of_node/compatible”和“cat of_node/status”,可以查到在设备树 中添加设备对应的值,如下图所示。 至此,设备注册完成,后面介绍驱动注册,驱动注册的时候,驱动名称要和这里的设备名 称一致,才能进入 probe 中。 此内容由EEWORLD论坛网友砂舞的玩笑原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-08-01
  • 发表了主题帖: 迅为4412开发板源码分析之协处理器

    本文分析 4412 的 uboot 源码,结合 uboot 源码来分析 uboot 完成了哪些工作。分析的源码文件是“cpu/ARM_cortexa9/start.S”文件。 1 源码分析 .globl _start :globl 类似 C 语言中的 Extern,类似定义一个全局函数_start,外部可以访问_start,_start 是整个 uboot 的入口,第一行代码就是从这里开始执行的。 _start: b reset :_start:表示进入到“全局函数”_start 的主体结构; b reset 表示跳到 reset。类似 c 语言中的 goto reset,跳转到 reset。_start 中在正常启动的时候只运行一条语句“b reset”,就跳转到 reset,剩余部分不会执行。 _start“全局函数”剩下的部分,在出现异常情况下,它会强制跳到异常处理代码中。 ldr pc, _undefined_instruction //“未定义指令”的时候,系统所要去执行的代码。 ldr pc, _software_interrupt //软件中断 ldr pc, _prefetch_abort //预取指错误 ldr pc, _data_abort //数据错误 ldr pc, _not_used //未定义 ldr pc, _irq //(普通)中断 ldr pc, _fiq //快速中断 以下代码是异常向量地址。 下面的代码表示接下来的代码,都要 16 字节对齐,不足之处,用 0xdeadbeef 填充 接着看一下 reset 主体部分,将其中#IF 0 等无关部分去掉,有效代码如下所示。 可以先直接看注释,不具体看每一行汇编的含义。 将 CPU 设置为 SVC32 模式。 cache 初始化和关闭。 关闭 TLBs,和 icache。 关闭 MMU 和 caches。 大家可能对以上名词比较陌生,事实上不理解这部分,并不影响我们移植新的 uboot,只需要将这部分和新的 uboot 这部分对比,有不同的地方修改下就成。 4412 开发板,使用的处理器是 Exynos 4412,它是采用 arm v7 指令集(体系结构),cortex a9 架构(CPU 核心内构),关于 cache、MMU 和 TLBs 等概念,在 4412 的datasheet 中是没有描述。如果大家感兴趣,可以在 ARM 官网中搜索文档。 arm 官网网址: https://developer.arm.com/ 作者下载了 A9 架构“DDI0388I_cortex_a9_r4p1_trm.pdf”的文档,这个文档中有关于这几个寄存器详细介绍,如果大家非常感兴趣,可以读一读。 在移植新的 uboot 时,这部分只需要将代码 copy 过去即可,更多的情况是,uboot 新版的源码中自带这部分源码。 这里给大家简要介绍下上面的几个重要名词概念。 3.2.2 ARM 的协处理器 作者将介绍前面涉及到的寄存器(SVC32、MMU 和 iCACHE 等寄存器),对应的 ARM官方英文文档来来回回看了好多遍,发现“协处理器”这个翻译让人很困惑。 “协助处理器”在网上有人这么描述“协处理器是一种芯片,用于减轻系统微处理器的特定处理任务。” 关于 ARM 处理器的协处理器,有这样定义的“协处理器可以附属于 ARM 处理器。一个协处理器通过扩展指令集或提供配置寄存器来扩展内核处理功能。一个或多个协处理器可以通 过协处理器接口与 ARM 内核相连。” 如果定义“协处理器”为一般用来指辅助 CPU 的芯片,这样独立显卡中的芯片也可以称为协处理器。如果使用“协处理器可以附属 ARM...”,那么 4412 中的硬件解码、3D 图形处理等也可以称为协处理器。 作者觉得还是要看 ARM 官网文档是如何描述这部分内容,如下图所示。 上面红色框中,第一行翻译为“系统控制协处理器”,我觉得用“系统控制协处理器”还是容易理解,可以接收。它包含了 15 个特殊的寄存器,主要提供“所有的系统控制和配置”、“MMC 控制和管理”、“cache 控制和管理”和“系统性能监控”功能。   在 ARM 的汇编代码中,凡是看到“mrc”和“mcr”指令,就表明接下来有一小段代码用来控制协处理器(后面全部简称为协处理器)。具体的含义,可以通过注释了解下,如果特别感兴趣,可以看下关于文档,里面对每一 bit 的作用都有详细的描述。 3.2.3 SVC32 模式在协处理器操作中,首先是将系统设置为 SVC32 工作模式,ARM 系统有 7 种工作模式:     除了用户模式之外的其他 6 种处理器模式称为特权模式,特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。特权模式中,除系统模式外,其他 5 种模式又称为异常模式。大多数的用户程序运行在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。用户模式下,当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。 svc 模式是特权模式,可以访问受限制的资源,它和 sys 模式所用的寄存器组是一样的,但是 svc 模式下的一些资源是 sys 模式不能访问的。 uboot 要完成初始化硬件的工作,最终目标是启动 kernel,在 uboot 跳转到 kernel 之前,MPU 需要设置为 svc 模式。 结合在 uboot 完成初始化硬件和引导内核的功能来分析,在 uboot 初始化阶段就应该将uboot 设置为 svc 模式。   3.3.4 MMU 内存管理单元在协处理器中,最重要的是内存管理单元。它是一种负责处理中央处理器的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制。 如果学习过驱动教程,会了解到在内核源码中,操作 GPIO 的时候,操作的是虚拟地址,而不是物理地址。MMU 是物理地址和虚拟地址转化的控制单元。 cache 是高速缓存,cpu 的处理速度越来越快,假如 CPU 直接和内存通信,内存的速度仍然达不到要求,CPU 要通过高速缓存来和内存通信,高速缓存的速度比内存要快。 TLB 是用于链接 cache 和内存,mmu 用于链接内存和物理地址。 这里我们需要理解的是,在系统启动过程中,cpu 和内存之间要完成通信,首先需要 TLB实现 cache 和内存之间的地址映射,通过 mmu 实现虚拟地址和物理地址之间的映射。 如果不将 mmu、TLB 以及 cache 关闭,cpu 可能会直接去 cache 取值,这个时候内存和 cache 之间可能还无法正常通信,可能导致 cpu 读取数据出现错误。 关于协处理器就介绍完毕了,涉及到的汇编指令,这部分建议只通过附录来了解一下。我们要尽快掌握全貌,不能陷入到某一个概念中,而且这部分也不影响最终目标--uboot 的移植。

  • 2019-07-31
  • 发表了主题帖: 如果快速提升产品研发效率?技术支持iTOP-4418开发板必备

    iTOP-4418开发板 支持动态调频,AXP228电源管理,低功耗运行 系统支持:Android4.4/5.1.1、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04   内存:1GB DDR3(2GB)存储:16GB存储EMMC;4MB的EEPROM用来存储关键数据 底板:125mm * 190mm;核心板:50mm*60mm CPU:四核 Cortex-A9-八核 Cortex-A53 板载 : 4G、GPS、WIFI蓝牙、千兆以太网、AD、CAMERA接口、MIPI接口、CAN/RS485接口等 资料的话,原理图、底板的PCB、驱动程序源码、芯片和LCD数据、开发环境、使用手册+++网盘的资料(光盘+百度云)

  • 2019-07-30
  • 发表了主题帖: 迅为-iMX6开发板-设备树内核-sys方式控制GPIO

    本文档主要讲解迅为-iMX6 开发板,通过 sys 文件的方式来控制 GPIO。 要通过 sys 控制 GPIO,需要做以下几步操作: 1 开启内核中的“GPIO_SYSFS”驱动配置; 2 确保 IO 被配置为 GPIO,并且没有驱动调用; 3 计算 GPIO 编号,通过命令或者脚本操作 GPIO。 1 GPIO_SYSFS 配置 如下图所示,可以看到内核中 GPIO_SYSFS 是默认配置的,这个驱动所有原厂 BSP 基本 都会包含,一般情况下是默认配置的。 2 确保 IO 被配置为 GPIO,并且没有驱动调用 这里以 LED 的 GPIO 为例, 将 LED 的驱动去掉,确保没有驱动调用。 Device Drivers ---> Character devices ---> Enable LEDS config ---去掉,并重新编译内核烧写到开发板中。 如下图所示配置 menuconfig。 烧写到开发板中,确保没有 led 的设备节点,默认的内核中是有 led 设备节点的,如下图 所示。 3 计算 GPIO 编号并测试 LED 的网络标号为:KEY_ROW6 LED 对应 GPIO 的 PIN 脚名称为:GPIO_2 GPIO_2 对应的宏定义为:#define MX6QDL_PAD_GPIO_2__GPIO1_IO02 那么 GPIO_2 对应的 GPIO 的 bank[n]为 GPIO1_IO02,也就是 bank 1 的 02 号 GPIO。 GPIO 的编号计算方法为:nr=(P -1)* 32 + N; nr 为编号,P 为 bank 号,N 为具体 bank 中的编号。 那么 P=1,N=2,通过计算得出 nr=2。 测试命令为: echo nr > /sys/class/gpio/export echo out > /sys/class/gpio/gpionr/direction echo 1 > /sys/class/gpio/gpionr/value ---> 写高电平,小灯亮 echo 0 > /sys/class/gpio/gpionr/value ---> 写低电平,小灯灭 以上 nr 替换成 GPIO 的编号,则命令为: echo 2 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio2/direction echo 1 > /sys/class/gpio/gpio2/value --->写高电平,小灯亮 echo 0 > /sys/class/gpio/gpio2/value ---> 写低电平,小灯灭 如下图所示,执行三条命令之后小灯亮。 接着执行 echo 0 > /sys/class/gpio/gpio2/value 小灯灭。 至此,sys 测试 gpio 完成。 另外需要注意的是,本文档没有介绍 LED 对应的管脚是如何配置的,因为 LED 驱动能够 运行,那么肯定在设备树文件中配置了。 如果想要掌握如何配置管脚,可以参考“iTOP-iMX6-设备树内核-IO 配置分析文档 _V1.X”和“iTOP-iMX6-设备树内核-IO 扩展例程_V1.X”文档。

  • 2019-07-29
  • 发表了主题帖: 资料有三?暑假学习必备开发板-itop4412开发板-视频_网盘_技术群

    核心板参数 尺寸 50mm*60mm 高度 连同连接器在内0.26cm CPU Exynos4412,四核Cortex-A9,主频为1.4GHz-1.6GHz 内存 1GB 双通道 DDR3(2GB 可选) 存储 4GB EMMC(16GB 可选) 电源管理 低功耗动态三星S5M8767电源管理,最优架构! 工作电压 2.65V--5.5V (推荐4.0V) 系统支持 Linux-QT5.7/Android 4.0.3 /Android 4.4/Ubuntu12.04操作系统 USB HOST 板载USB3503,引出高性能HSIC,实现2路USB HOST输出 引角扩展 引出脚多达320个,满足用户各类扩展需求 运行温度 -25度至+80度区间,设备工作正常,运行良好! 底板参数 尺寸 110mm*190mm DIP SWITCH 1个 SWITCH 电源接口 GPIO 20PIN(电源和地) RESET 1个复位按键 CAMERA接口 1个(可支持200万和500万摄像头) POWER 电直流电源输入接口,5V/2A电源输入 WIFI接口 1个 TF Card 1个标准TF卡接口 HDMI接口 标准HDMI v1.4,1080p高清分辨率输出 USB Host 2路USB Host,支持USB2.0协议 LCD接口 共3个,2个LVDS接口,1个RGB接口 USB OTG 1路USB OTG 2.0 LCD电源开关 1个 以太网口 10M/100M自适应网口 MIPI接口 1个 PHONE 支持耳机输出 实时时钟 内部实时时钟,带有后备锂电池座,断电后系统时间不丢失 MIC 支持MIC输入 BUZZER 1个蜂鸣器 串口 2路串口 JTAG接口 1个 A/D 1路 串口、矩阵键盘、GPS接口 1个 User Key 5个功能按键 LED 2个    

  • 2019-07-26
  • 发表了主题帖: 迅为-iMX6开发板-设备树内核-IO配置分析文档

    本文档主要讲解在 iMX6 开发板设备树内核 IO 是如何配置为各种功能的基础文档。 1 飞思卡尔系列 IO 配置概述 在作者接触过的所有的飞思卡尔 BSP 源码中,它们的 IO 配置方法基本都是类似的。 源码中都会有一个头文件,用户保存全部 IO 的所有配置宏,在设备树源码中是 “arch/arm/boot/dts/imx6q-pinfunc.h”这个文件。 如下图所示,是该文件 GPIO_2(这是 LED 灯的宏定义)中所有的宏定义。这些宏定义在 内核运行的时候根据需要,选择一个,默认内核中应该是使用的是 “MX6QDL_PAD_GPIO_2__GPIO1_IO02 ”这个宏,使用这个宏配置之后,它就是 GPIO 了。 源码中都有一个初始化的地方,也就是引用上面宏的数组或者结构体。在设备树代码中 是“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”文件。 例如上面提到的宏,在如下图所示位置定义。 当然,我们在这个设备树文件中,可以看到还有其它宏在别的地方定义和初始化,这里我 们先只介绍 GPIO 的,GPIO 在上图中的位置定义即可,另外如果还有别的地方调用 IO 的 宏,是需要屏蔽掉的。 假如我们在调试 LED(GPIO_2)的时候,在上面位置加入了 “MX6QDL_PAD_GPIO_2__GPIO1_IO02”这个宏,另外还需要确保源码中没有引用其它的 宏,如果有引用必须屏蔽掉,如下图所示剩下的四个宏都不能被引用。 2 LED 灯 IO 的配置原理分析 前面提到 LED 的 IO 宏对应的是 MX6QDL_PAD_GPIO_2__GPIO1_IO02,作者是直接给 的结论,这里给大家详细分析下如果通过网络标号找到对应的宏定义。 LED 小灯的网络标号是“KEY_ROW6”,如下图所示。 搜索“KEY_ROW6”,找到网络标号在核心板上对应的 PIN 脚,如下图所示,PIN 脚名 称为“GPIO_2”。

  • 2019-07-25
  • 发表了主题帖: iTOP4418开发板Android4.4/5.1.1_Linux3.4.39_QT5.7_Ubuntu12.04系统

    iTOP-4418开发板 支持动态调频,AXP228电源管理,预留锂电池接口,内置充放电电路及电量计 核心板320PIN全引出,16G存储高配版本,核心板4418/6818全兼容,并跨行业大量应用 系统支持:Android4.4/5.1.1、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04 内存:1GB DDR3(2GB)存储:16GB存储EMMC; 底板:125mm * 190mm;核心板:50mm*60mm CPU:四核 Cortex-A9;八核 Cortex-A53 接口 : 4G、GPS、WIFI蓝牙、千兆以太网、AD、CAMERA接口、MIPI接口、CAN/RS485接口等 资料的话,原理图、底板的PCB、驱动程序源码、芯片和LCD数据、开发环境、产品使用手册。 发货清单:开发板+电源+串口线+USB线+HDMI线+网线+光盘+铜柱 豪华型清单:开发板(含4G+GPS)+电源+串口线+USB线+HDMI线+网线+CAN/RS485模块+4G、GPS天线+光盘+铜柱   核心板参数  尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm PCB层数:6层PCB沉金设计 4418 CPU:ARM Cortex-A9 四核 S5P4418处理器 1.4GHz 6818 CPU:ARM Cortex-A53 八核 S5P6818处理器 1.4GHz 内存:1GB DDR3(2GB可选) 存储:16GB EMMC 电源管理:AXP228(官方推荐最佳匹配),支持动态调频,超低功耗 工作电压:直流5V供电 系统支持:Android4.4/5.1.1、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04 运行温度:-25℃至+80℃ 引角扩展:4418功能全部引出,四组连接器共320个PIN脚 扩展参数: LCD:24位RGB 888,可根据屏幕要求取舍; LVDS:4通道、可配置; HDMI:v1.4; MIPI:DSI和CSI各一个,支持LCD和CAMARA; DVP:可支持DVP格式并口摄像头; SDIO:3个(1路被占用); USB_HOST:1个,底板扩展3个; USB_OTG:1个,底板作为DEV用; USB_HSIC:1个; UART:可6路复用; I2C:3路,可用于触摸屏等; SPDIF:1路; GPIO:多数已引出; SPI:3路,可用于CAN扩展; 以太网:1路自适应千兆; PWM:3路,可用于背光控制; 锂电池充放电:引出,可直接使用(带电量计); ADC:7路模拟输入; JTAG:1路; 底板参数 尺寸底板:125mm * 190mmPHONE支持耳机输出 PCB层数:4层PCB 设计串口:2个232串口,另外2路TTL串口给蓝牙和GPS用 EEPROM:4MB的EEPROM用来存储关键数据 USB Host:3路USB Host,支持USB2.0协议 POWER:电直流电源输入接口,5V/2A电源输入 TF Card:1个标准TF卡接口 充放电接口:1个,可接普通锂电池,带电量计 4G模块:全网通  (选配) SWITCH:电源接口 WIFI模块:支持 DIP SWITCH:3位拨码开关 GPS模块:支持 (选配) AD:支持 网口:千兆以太网接口 JTAG接口:1个 LCD接口:2路LVDS接口, 1路RGB接口 CAMERA接口:1路DVP(可支持500万摄像头); 1个MIPI; MIPI接口:1路接MIPI接口的屏幕 GPIO/CAN/RS485接口:1路CAN 1路RS485接口 HDMI接口:标准HDMI v1.4,1080p高清分辨率输出接口 User Key:4个功能按键 USB OTG:1路USB OTG 2.0 IRDA:1个红外一体化接收头 RTC座:1个 MIC:支持MIC输入多媒体 编码支持:H.263 H.264 MPEG等多种音频格式

  • 2019-07-24
  • 回复了主题帖: 研发实力谁最强?IMX6开发板又出“新变化”

    企业用户购买可以申请优惠的噢

最近访客

< 1/2 >

统计信息

已有50人来访过

  • 芯币:322
  • 好友:--
  • 主题:146
  • 回复:60
  • 课时:--
  • 资源:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言