arm开发板有哪些 arm开发板
文章插图
Arm开发板(什么是arm开发板)
打开盒子,里面有一张全家福照片 。
箱内物品包括开发板(背板+核心板)、12V2A电源适配器、micro usb安卓数据线、type-c安装数据线、显示线 。
再给我一张开发板的特写 。
该开发板有两个版本,一个是内存容量为512MB+512MB的NAND版本,另一个是内存为512MB+8GB的eMMC版本 。我手里有NAND版 。NAND和eMMC开发的程序除了U-boot之外都是一样的,很容易切换 。Wildfire i.MX6ULL处理器的主频为800MHz,包含两个网络端口,因此很容易对网络进行编程 。
开发板的配置如上图 。板载一个HDMI高清视频接口,在没有屏幕的情况下可以直接连接电脑屏幕 。关于开箱的内容,就这些 。
NFS的环境建设本文将ubuntu18.04安装在win10的虚拟机中进行开发,所有的坑和解决方案都是基于这个系统 。在ubuntu的终端输入
sudo apt-get updatesudo apt install net-toolssudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop将ubuntu和开发板连接到同一个路由器上,确保它们的ip在同一个网段上 。进入Ubuntu
sudo apt install nfs-kernel-server在home/user下设置nfs文件夹,通过下面的命令给予权限(我的用户目录是hasee)
sudo chmod -R 777 nfs使用vim命令打开/etc/exports以更改以下内容
保存后重新启动虚拟机 。使用ifconfig查询ubuntu下的原生ip
我的IP: 192.168.2.217通过串口终端连接win10电脑和开发板,分享了一个我经常用的工具mobxterm _ personal _ 20.6,很强大,谁都知道 。打开MobaXterm,操作如下图 。
这样就可以操作开发板的终端了 。首先,在根目录下的mnt目录中设置nfs文件夹,输入pwd并返回到以下路径
进入开发板
sudo mount -t nfs 192.168.2.217:/home/user/nfs /mnt/nfs解释:192.168.2.217此IP是计算机虚拟机的IP/home/user/nfs Ubuntu是虚拟机的nfs文件夹路径ubuntu /mnt/nfs是开发板中NFS的路径,只要不出现以下提示就表示成功:
编写第一个测试程序用ubuntu编写一个简单的测试程序,文件名为helloworld.c,源代码如下
#include "stdio.h"int main(int argc,char **argv){printf("hello world!\n");return 0;}执行以下命令进行编译 。这里必须使用交叉编译工具,否则无法在开发板上运行:
gcc-arm-linux-gnueabihf-gcc helloworld.c -o helloworldhelloworld文件将在相同的路径中生成,如下所示
通过cp命令将新生成的helloworld文件复制到ubuntu的home/user/nfs路径 。在win10上用MobaXterm工具操作开发板终端,进入/mnt/nfs路径,找到里面的helloworld文件,执行命令 。
./helloworld
这意味着程序成功执行,构建的环境可用 。前面已经实现了最简单的驱动模板,这次继续探讨驱动的编写 。驱动代码核心的两句话是注册模块加载函数module_init()和注册模块卸载函数module_exit() 。这次要提的是设备号的申请,角色设备的注册,节点的创建 。
应用设备号申请设备号通常有两种方式:静态申请和动态申请 。
静态应用设备号静态应用设备号的功能原型
int register_chrdev_region(dev_t from, unsigned count, const char *name)//参数dev_t from: dev_t类型的变量,用于指定字符设备的起始设备号,如果要注册的设备号已经被其他的设备注册了,那么就会导致注册失败 。//参数unsigned count:指定要申请的设备号个数,count的值不可以太大,否则会与下一个主设备号重叠 。//参数const char *name:表示设备名称,我们可以在/proc/devices中看到该设备 。//返回值0表示申请成功,返回其它表示失败,并且失败的原因可以通过错误码获取 。当使用静态应用程序设备号时,您需要检查内核中使用了哪些设备号 。一旦出现重复,设备号的申请就会失败,相应的设备注册也会不成功,使用起来非常不方便 。
动态应用设备号动态申请设备号的功能原型
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)//参数dev_t *dev:指向dev_t类型数据的指针变量,用于存放分配到的设备编号的起始值;//参数unsigned baseminor:次设备号的起始值,通常情况下,设置为0;//参数unsigned count:同register_chrdev_region类型,用于指定需要分配的设备编号的个数以及设备的名称 。//返回值0表示申请成功,返回其它表示失败,并且失败的原因可以通过错误码获取 。这个函数,内核会自动给我们分配一个未使用的主设备号 。不要以为操作使用比静态方便很多 。在驱动程序开发中很常见,尤其是在3的内核中 。X.
推荐阅读
- 惠普笔记本主板进水烧了?惠普笔记本电脑进水维修很贵吗_2
- 漫威|《漫威蜘蛛侠》开发商被群嘲:多次称游戏不会上PC
- 为什么自行车能动?
- ARM|ARM又被盯上!曝三星电子有意收购
- 三星|OLED面板的iPad有戏:三星正为其建立新生产线
- 平板触屏部分失灵最简单的方法?平板触屏失灵怎么办
- 面板数据模型(几种面板数据模型的解释)
- 大学|公务员工作很累,工资又低,我想辞职可以吗?想去搞软件开发挣钱
- 太阳队|鱼塘老板怒折偷钓者4根鱼竿,钓鱼人请来律师:鱼塘承包不合法
- 真我|首销曾被抢购一空 真我平板X现货:1499元