
iTOP-4412
文章平均质量分 57
从今天开始,边学习,边记录我的迅为iTOP-4412开发板学习历程。开发板配置为1G+8G的POP。请参考的同学注意了。
Hello Jason
认真写好每一行代码!
展开
-
SPL简介
SPL(Secondary programloader)是uboot第一阶段执行的代码。主要负责搬移uboot第二阶段的代码到系统内存(System Ram,也叫片外内存)中运行。SPL是由固化在芯片内部的ROM引导的。我们知道很多芯片厂商固化的ROM支持从nandflash、SDCARD等外部介质启动。所谓启动,就是从这些外部介质中搬移一段固定大小(4K/8K/16K等)的代码到内部RAM中运行。这里搬移的就是SPL。在最新版本的uboot中,可以看到SPL也支持nandflash,SDC...原创 2022-04-20 14:39:53 · 2145 阅读 · 0 评论 -
各版本arm-gcc区别与安装
原文地址:https://www.jianshu.com/p/fd0103d59d8e一、arm-linux-gcc、arm-none-eabi-gcc、arm-eabi-gcc、arm-none-linux-gnueabi-gcc区别1、arm-none-eabi-gcc==(ARM architecture,no vendor,not target an operating system,complies with the ARM EABI)==Arm官方用于编译 ARM 架构的裸机系统转载 2021-09-01 11:30:47 · 8651 阅读 · 0 评论 -
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
原文地址 :https://zhidao.baidu.com/question/1691117630864232868.html自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和我有同样困惑的兄弟…..一. 什么是ABI和EABI1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)在计算机中,应用二进制接口描述了应用程序(或者其他...转载 2021-09-01 11:20:55 · 433 阅读 · 0 评论 -
嵌入式Linux学习问题解决记录
问题:make menuconfig提示'make menuconfig' requires the ncurses libraries解决方法解决:Google了一下,原来只需要安装libncurses5-dev就可以了,执行如下命令:sudo apt-get install libncurses5-dev原创 2021-12-10 20:54:06 · 741 阅读 · 0 评论 -
十五、linux 注册字符类设备和生成节点
一、注册字符类设备1、概述• 分配内存空间函数kmalloc– 分配连续的虚拟地址,用于小内存分配。在include/linux/slab.h文件中。– 参数1:申请的内存大小(最大128K),– 参数2:GFP_KERNEL,代表优先权,内存不够可以延迟分配• 清空内存空间的数据函数memset– 可以清空内存空间,也就是全部写为0– 参数1:内存地址– 参数2:0– ...原创 2021-07-19 17:09:53 · 451 阅读 · 1 评论 -
十四、linux 静态/动态申请字符设备号
一、静态申请字符类设备号• 字符设备函数在文件“include/linux/fs.h”中• 内核提供了函数来注册一组字符设备编号– register_chrdev_region()• register_chrdev_region()是提前知道设备的主次设备号,再去申请设备号,属于静态申请。二、动态申请字符类设备号• 字符设备函数在文件“include/linux/fs.h”中...原创 2021-07-16 16:07:37 · 737 阅读 · 0 评论 -
十三、linux 内核驱动模块传参数
在加载模块的时候,可以向它传参数。单个参数:内核模块可以通过module_param来传单个参数– module_param(name,type,perm)– name:模块参数的名称– type: 模块参数的数据类型(支持int long short uint ulong ushort类型)– perm: 模块参数的访问权限(S_...原创 2021-07-16 14:36:38 · 476 阅读 · 0 评论 -
十二、linux LED初始化
一、硬件原理图 我们今天的目标是将itop4412开发板上的两个led灯控制起来。先看一下原理图:二、GPIO需要的接口和定义1、Linux中申请GPIO的头文件– include/linux/gpio.h主要提供一些GPIO操作函数:2、三星平台的GPIO配置函数头文件– arch/arm/plat-samsung/include/plat/gpio-cfg.h – 包括三星所有处理...原创 2021-07-15 16:53:45 · 914 阅读 · 4 评论 -
十二、linux GPIO初始化
• 初始化过程简单描述– 平台文件分别定义好物理地址和虚拟地址– 物理地址和虚拟地址之间映射原创 2021-07-10 15:49:02 · 869 阅读 · 0 评论 -
十一、linux物理地址虚拟地址
占位原创 2021-07-10 14:09:39 · 149 阅读 · 0 评论 -
十、驱动工程师硬件知识
占位原创 2021-07-10 14:08:37 · 233 阅读 · 0 评论 -
九、linux设备节点注册
临时占位,还没弄好,后期再修改一、杂项设备 杂项设备可以说是对一部分字符设备的封装,还有一部分不好归类驱动也归到杂项设备。为什么会引入杂项设备?• 第一、节省主设备号– 如果所有的驱动都是用字符设备,那么所有的设备号很快就用完了,总共就255个主设备号。• 第二、驱动写起来相对简单– 如果直接使用封装好的杂项设备,那么就可以减少一步注册主设备号的过程。杂项设备初始化部分源文件“driver...原创 2021-07-09 15:47:10 · 889 阅读 · 0 评论 -
八、linux以模块方式注册设备
我们刚刚在《六、linux虚拟平台设备注册》中,介绍了如何注册一个设备,但是呢,那种方式适合在程序定型之后那样做。当我们前期调试时,如果每一次都要编译内核,那很浪费时间,所以,今天我们来讲以模块方式注册设备。 我们先回顾一下刚刚注册设备时使用的结构体(vim include/linux/platform_device.h):那么我们首先要创建一个platform_device类型的结构体变量,并把这个变量通过platform_device_regis...原创 2021-07-09 10:25:59 · 471 阅读 · 0 评论 -
七、linux驱动注册
一、驱动注册结构体驱动注册使用结构体platform_driver,该结构体在头文件“vim include/linux/platform_device.h”中,和刚刚那个设备注册的驱动在同一个头文件。 驱动注册platform_driver_register 驱动卸载函数platform_driver_unregister也在这个头文件中,这两个函数的参数都只有结构体platform_driver驱动常见的几种...原创 2021-07-09 09:51:36 · 756 阅读 · 1 评论 -
六、linux虚拟平台设备注册
一、使用到的设备结构体 注册设备使用结构体platform_device,该结构体在头文件“viminclude/linux/platform_device.h”中。头文件中也有注册设备和卸载设备的函数。二、设备注册操作将设备结构体(platform_device)放到平台文件(arch/arm/mach-exynos/mach-itop4412.c)中,会自动注册设备,不用去调用注册设备的函数。 我们仿照LED写了一个HELLO。如下图修改...原创 2021-07-09 09:24:08 · 601 阅读 · 0 评论 -
五、linux总线中设备和驱动注册流程详解
一、注册流程图(建议大家先看这张图3分钟。)由上图可以看出,linux中,有各种总线(bus),其中的平台总线(platform)是我们字符设备和驱动注册的地方。通过platform_device结构体注册设备。然后再通过platform_driver结构体注册驱动。再通过platform_match匹配驱动和设备结构体中的name,如果相同,就调用驱动结构体中的probe,生成设备节点等。设备一般都需要先注册,才能注册驱动,但是现在越来越多的热拔插设备,反过...原创 2021-07-09 08:51:37 · 1920 阅读 · 0 评论 -
局域网内其他电脑通过SSH访问NAT模式下的虚拟机
本地VMware虚拟机,网络模式为NAT,现在需要局域网其他电脑通过ssh连接这台VMware虚拟机宿主机地址:192.168.0.72VMware虚拟机地址:192.168.149.132局域网其他机器地址:192.168.0.841、"编辑: -> "虚拟网络编辑器"(先关闭所有虚拟机运行的主机),点击“更改设置”。2、选择VMnet8 ,点“NAT设置”2、添加 “端口转发”,如图,映射物理机8888到虚机22(ssh端口)3、这里需要将宿..原创 2021-07-07 15:55:43 · 2066 阅读 · 0 评论 -
四、linux编译规则文件Makefile
makefile脚本语法规则具体看:1、编译器路径设置linux内核源码根目录下makefile文件修改编译器路径。如下图:2、强制编译源码开发者强制要求编译进内核的文件 ,类似下面的写法,只要编译内核就必须编译这个文件– obj-y += gpio/如下图:3、Linux内核编译流程分析...原创 2021-07-06 15:01:16 · 290 阅读 · 0 评论 -
三、linux内核驱动裁剪
一、Menuconfig的操作1、Linux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉,menuconfig是生成.config的一个工具。在Linux发展过程中,配置内核可以使用一下命令:– #make config(基于文本的最为传统的配置界面,不推荐使用)– #make menuconfig(基于文本菜单的配置界面)– #make xconfig(要求QT被安装)– #make gconfig(要求G...原创 2021-07-06 14:22:24 · 1381 阅读 · 0 评论 -
linux思考の为何要挂载
一直有一个疑问,为什么我们不能直接访问dev/目录下的存储设备,如sd卡:/dev/mmcblk1p1,U盘:/dev/sda1。而是要再通过命令挂载到mnt目录下:mount /dev/mmcblk1p1 /mnt/sddisk/或mount /dev/sda1 /mnt/udisk/。 那我们能不能直接访问dev目录下的sd卡或者是u盘呢?答案是可以的。/dev下很多种设备,我们就只讨论块设备,向分区写入镜像:dd if=system.img of=/dev/sda1,...原创 2021-07-06 09:23:24 · 1676 阅读 · 0 评论 -
二、linux最小驱动
一、最小驱动源码如下图,最小驱动需要四部分,具体看下面源码源码mini_linux_module.c如下:#include <linux/init.h> // Linux源码目录下的include/linux/module.h#include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); // 如果你不声明GPL协议,你的模块将无法在Linux 中使用的MODULE_AUTHOR("JASON"); /..原创 2021-07-05 19:09:23 · 433 阅读 · 1 评论 -
一、linux驱动理论
1、Linux驱动包含三种:字符设备驱动、块设备驱动、网络设备驱动。大部分设备是字符设备。2、Linux把设备看成了文件,这样就可以按照文件的操作形式来控制设备。实现统一的调用接口( open, read, write, ioctrl,close)。3、驱动开发主要是做什么?实际上驱动开发就是实现上面的open, read, write, ioctrl,close。将我们写的可以用来操作设备的函数注册给linux系统。4、CACHE(高速缓存),位于CPU和主存之间的高速存储子系统,提高存储器的原创 2021-07-05 15:16:37 · 364 阅读 · 0 评论 -
十四、Linux进程编程
一、进程概念进程和线程的对比网上很多资料有介绍,这边有一篇文章,大家可以参考一下:https://www.cnblogs.com/qianqiannian/p/7010909.htmllinux上查看进程的命令:top,就可以像window下查看任务管理器一下。按q退出。二、进程ID1、每一个进程都有一个唯一的标识符,进程ID 简称pid进程id 一般默认的最大值为32768,不过也是可以修改的,当然一般情况下不需要这么做。如果当前进程是1000,那么下一个分配的进程...原创 2021-06-29 19:10:35 · 328 阅读 · 1 评论 -
迅为i-TOP4412出厂首次烧写
开发板焊接回来,没有uboot引导程序,所以我们要把uboot烧写进去。1、准备一张TF卡,卡的大小没有要求,TF卡的格式为FAT32格式。2、重新格式化TF卡,使用我们的提供的FormatTool格式化软件格式化一下TF卡,然后在用Windows格式化为FAT32格式。3、把uboot源码拷贝到我们搭建好的ubuntu12的环境中去。然后拷贝对应的最新的uboot镜像到解压出来的uboot源码里面。(注意,我这边用的是SCP 1G版本的,大家可以自行选择自己版本)4、将格式化.原创 2021-06-26 15:04:18 · 391 阅读 · 0 评论 -
Exynos 4412启动过程(群聊笔记记录)
1、Exynos 4412的0地址:可以看到0x0000_0000叫做iROM,一共64K。主要功能是根据外部拨码开关选择启动方式。2、拨码方式:iROM里的程序就会首先去1st里找程序,如果找不到,然后再去2nd卡里找程序(也就是TF卡)iROM执行以后,会到外部找程序,找到以后,要拷贝8K的程序到内部RAM,这8K的程序就是BL1(bootloader1)。这部分是三星自己写的,就是这个文件E4412_N.bl1.SCP2G.bin。不开源的。uboot在编译完成后...原创 2021-06-25 10:13:10 · 481 阅读 · 0 评论 -
十三、linux编程中目录IO常用编程函数
一、stat函数组(获取文件信息,具体看stat结构体 )1、头文件、函数原型及相关结构体(可以通过man 2 stat 打开对应的stat帮助文档)/*所需头文件*/#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>/*函数原型*/int stat(const char *path, struct stat *buf);– 参数*path:文件路径– 参数*buf:文件信息原创 2020-11-19 22:38:00 · 203 阅读 · 0 评论 -
十二、Linux系统编程中man命令的使用
一、man命令简介man本身就是linux命令,可以使用man命令查看man的说明文档。二、分页man命令的8个分页:man1:一般命令。常见的linux命令,例如ls,cd,cat等等 man2:用来放内核提供的系统调用或者函数。例如man 2 fork等 man 3:C库函数。 man 4:特殊文件,例如设备和驱动程序 man 5:文件格式。包括完全使用文本配置文件定制系统的操作,大量的配置文件,网络服务列表,可用的shell列表等等 man 6:游戏和屏幕保...原创 2020-11-09 21:08:01 · 878 阅读 · 0 评论 -
十一、Linux时间
一、获取时间• 获取机器时间函数• time_t time(time_t *t);– 参数*t:以秒为单位的机器时间– 返回值:如果参数为NULL,则返回机器时间;错误返回-1;– time_t类型实际是一个long int类型。/*函数time头文件*/#include<time.h>#include<stdio.h> int main(void){ time_t timep; time(&timep); printf("UTC ti原创 2020-11-06 22:09:33 · 339 阅读 · 0 评论 -
十、延时之基本知识介绍及实验
• 函数sleep 是秒延时• unsigned int sleep(unsigned int seconds);– 例如:sleep(1),即延时一秒。– 返回值:无符号的整形数值,如果延时成功则返回0,如果延时过程中被打断,则返回剩余的秒数。例如sleep(5),返回值为3,那么实际延时就是5-3=2 秒。函数usleep 是微秒延时• int usleep(useconds_t usec);– Useconds 需要小于1000000– 例如:usleep(10),表示延时10 微秒。原创 2020-11-06 21:54:04 · 725 阅读 · 0 评论 -
九、NFS服务器
一、搭建NFS服务器1、安装Ubuntu NFS服务– apt-get install nfs-kernel-server安装过程弹出对话,选择Y,回车继续安装,安装完成后可以在输入一次上面的命令, ,最后显示如下图,就安装成功了。原创 2020-11-01 21:21:57 · 286 阅读 · 1 评论 -
八、TFTP服务器搭建及应用
一、什么是TFTPTFTP简单文件传输协议,是一个基于UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合TFTP 协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证端口号为69原创 2020-11-01 21:21:12 · 373 阅读 · 1 评论 -
七、Linux串口编程
Linux下的串口编程过程如下(我就不给大家再讲串口是什么了,不懂得朋友自行补上串口相关知识):目录一、打开串口二、初始化串口1、 串口的初始化结构介绍2、串口的初始化常用函数介绍函数 tcgetattr波特率相关的函数cfsetispeed 和 cfsetospeed、cfgetispeed 、cfgetospeed函数 tcflush函数 tcsetattr3、初始化流程分析4、串口初始化代码三、串口发送数据四、串口接收数据五、关闭串口六、..原创 2020-10-30 23:52:29 · 1642 阅读 · 2 评论 -
六、字符设备控制
在 linux 驱动中字符驱动是必须掌握的,本章主要介绍字符设备应用的程序,无论是学习了后面的知识自己写的字符驱动,还是已有的字符驱动,都需要能够写一些简单的应用程序。一、字符类led灯1、led原理图如下: 2、程序设计在前面介绍过,如果要给文件进行写操作,那么使用的是 write 函数。对于 led 小灯的操作,使用写函数,理论上也是可以的。但是对于 IO 口(这里的 IO 口指的是硬件上的 IO 口,不是指 IO...原创 2020-10-24 21:35:45 · 365 阅读 · 1 评论 -
五、文件IO函数
对于传统的操作系统来说,普通的 I/O 操作一般会被内核缓存,这种 I/O 被称作缓存I/O。本文所介绍的文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输,所以该文件访问的机制称作为直接 I/O。Linux 中就提供了这样一种文件访问机制,对于那种将 I/O 缓存存放在用户地址空间的应用程序来说,直接 I/O 是一种非常高效的手段。一、打开文件函数openint open(const char *path, int oflags); int open(const ch原创 2020-10-24 19:59:19 · 595 阅读 · 0 评论 -
四、linux基础知识
在 Linux 中, 超级用户称为 root。 root 用户可以控制所有的程序, 访问所有文件, 使用系统上的所有功能。 对 root 用户来说没有不可以做的事情。 就管理的角度而言, root 的权限是至高无上的。 所以, root帐号一定要通过安全的密码保护起来, 这一点非常重要。原创 2020-10-22 19:52:22 · 227 阅读 · 0 评论 -
三、开发调试应用程序
我们今天将使用三种方式,把我们自己写的helloworld程序在开发板上运行起来。分别是以下三种:借助U盘开发调试应用程序 借助TF卡开发调试应用程序 把程序打包进最小linux文件系统镜像里原创 2020-10-14 22:55:00 · 361 阅读 · 0 评论 -
二、制作最小linux系统
一、Busybox简介制作文件系统我们需要使用到Busybox 工具 – 版本为busybox-1.21.1.tar.bz2 – 开源网址是http://www.busybox.net/ – BusyBox 是一个集成了一百多个最常用linux 命令和工具的软件,包含常用的shell命令二、配置Busybox 在Ubuntu下新建目录,将Busybox 压缩包拷贝进去,并解压 使用“make me...原创 2020-10-09 21:54:45 · 605 阅读 · 0 评论 -
一、烧写最小linux系统
一、概述开发板不仅可以运行Android和Qt,还可以运行最简单的Linux最小文件系统,最小系统有一下特点:“麻雀虽小五脏俱全”,便于学习 不能够实现图形界面二、搭建准备使用搭建好的最小linux系统,需要的四个文件“u-boot-iTOP-4412.bin”,不用烧写 “zImage”使用光盘“04_镜像_QT文件系统/zImage”目录下的zImage文件(注意选择对应的SCP和POP,和板子匹配)。 “ramdisk-uboot.img”,使用光盘“04_镜像_QT文件...原创 2020-10-08 20:56:20 · 800 阅读 · 2 评论