字符内核驱动框架
需要重点掌握的的函数:物理内存映射到虚拟空间后,在内核使用ioremap进行映射,在用户空间使用mmap进行映射。
ioremap函数与readl,readb,readw,readq,writel,writeb,writew,函数配合使用
1、字符型设备框架–旧相关函数:
12345678910111213retvalue = register_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME, &chrdevbase_fops);unregister_chrdev(CHRDEVBASE_MAJOR, CHRDEVBASE_NAME);copy_to_user(.....);copy_from_user(.....);module_init(chrdevbase_init);module_exit(chrdevbase_exit);/* * LICENSE和作者信息 */MODULE_LICENSE("GPL");MODULE_AUTHOR("ygc");
1-1、旧字符框架123456789101112 ...
kernel移植(linux4.115移植)
1、选择编译器安装必备库
1sudo apt-get install libncurses5-dev libncursesw5-dev
内核版本,uboot版本,编译器版本,都会影响到程序能否正常运行。
123456#/bin/bashpath="/home/ygc/Desktop/linux-gcc/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin"make ARCH=arm CROSS_COMPILE=$path/arm-linux-gnueabihf- distcleanmake ARCH=arm CROSS_COMPILE=$path/arm-linux-gnueabihf- imx_v7_defconfigmake ARCH=arm CROSS_COMPILE=$path/arm-linux-gnueabihf- menuconfigmake ARCH=arm CROSS_COMPILE=$path/arm-linux-gnueabihf- all -j16
确认编译器没有问题。
2、添加板子的 ...
uboot移植(uboot2016移植)
移植uboot2016.03版本主要修改:配置文件,板子头文件。驱动文件
注意使用低版本的交叉编译工具,板子运行报错。
1、修改配置文件找到符合自己板子的配置文件–mx6ull_14x14_evk_emmc_deconfig复制一份
1cp mx6ull_14x14_evk_emmc_deconfig mx6ull_naro_emmc_deconfig
文件内容修改如下
12345CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_naro/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"CONFIG_ARM=yCONFIG_ARCH_MX6=yCONFIG_TARGET_MX6ULL_NARO=yCONFIG_CMD_GPIO=y
修改第一条板级配置文件路径,修改第四条编译的选项。
2、修改板子的头文件找到include/configs/mx6ullevk.h,复制一份
1cp mx6ullevk.h mx6ull_naro.h
将开头的编译宏改为
1 ...
nfs挂载文件出错
在uboot中设置
12bootargs,setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.8.213:/home/ygc/Desktop/driver/nfs/rootfs,proto=tcp rw ip=192.168.8.50:192.168.8.213:192.168.8.1:255.255.255.0::eth0:off'
但是引导后出现nfs挂载网络根文件系统是出现错误。
1234Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)random: nonblocking pool is initialized
经过各种试验发现是nfs服务的问题。
原因是:ubuntu18.04只支持nfs 3 ...
常见问题汇总
1、挂在busybox的时候出现内核崩溃
解决办法, 原因为没有使用交叉编译器进行编译,在Makefile中定义一下
123CROSS_COMPILE ?= arm-linux-gnueabihf-ARCH ?= arm
如果不定义,需要在编译的时候加上CROSS那一串。
2、popen函数引发僵尸进程目前没有好的办法,将调用频率降低,或者使用fork函数。
问题总结
1、隐式函数错误一般原因写驱动的时候经常遇到报隐式函数的报错,很麻烦,查找了很多原因,一般是函数拼写错误。
2、system命令导致系统问题system会导致系统出现严重的性能消耗,如果在程序中调用,需要单独开启一个线程进行使用,否则会生不可知错误。
3、结构体易错点3-1、第一个易错点采用memset函数初始化结构体,全部成员变量的值清零。
12memset(&queen,0,sizeof(struct st_girl));
注意事项,如果把一个结构体的地址传给子函数,子函数用一个结构体指针(如struct st_girl *pst)来存放传入的结构体的地址,那么,在子函数中只能用以下方法来初始化结构体:
1memset(pst,0,sizeof(struct st_girl));
不能用以下方法来初始化结构体:
1memset(pst,0,sizeof(pst));
因为子函数中用sizeof(pst),得到的不是结构体占用内存的字节数,而是结构体指针变量占用内存的字节数(8字节)
3-2、第二个易错 ...
无题
1、设备树学习的关键问题1-1、设备树是什么(1)device tree,设备树,是一种linux内核中采用的参数表示和传递的一种技术。(2)dts,device tree source ,设备树源文件 一般的给改设备树就在这里进行。(3)dtc,device tree compiler,设备树编译/调试工具。(4)dtb,device tree blob,二进制设备树镜像。
1-2、为什么需要设备树(1)典型需求就是内核设备驱动,但不止可以用在驱动上,也可以用在uboot向内核的传参。(2)驱动源码包括2大部分:策略(操作函数)和数据(硬件信息)。(3)早期在策略和数据都在kernel中。
1-3、设备树如何工作的(1)驱动开发者编写或者改写dts ,适配硬件和自己的需求。(2)make uImage时,kernel会先编译出dtc,然后用dtc加工成dtb。(3)uboot启动kernel时,将uImage和dtb都准备好并告诉uImage在哪里找到dtb。(4)kernel启动初期会调用内部的函数去解析dtb,得到硬件信息,并组装成数据结构,配合策略函数工作。 ...
xml语法规则
xml读写规则 # 避免 “:” 字符。冒号会被转换为命名空间来使用 表格定义:标签结构 数据对应:指定元素
所有的标题都用<>来表示。
示例
<新闻>
<新闻>
<id><1001><\id>
<标题><尚......><\标题>
<>......
......
<\新闻>
<id><1002><\id>
<标题><JAVA......><\标题>
<>......
...
ffmpeg移植
1、音视频入门1-1、视频
动画书静态小人书,通过快速翻动,形成动态效果。— 视频原理
视频将一些列的静态影像以电信号的方式进行动态捕捉
一、扩展ffmpeg1ffmpeg -f v4l2 -r 30 -s 640x480 -i /dev/video0 -f alsa -ar 44100 -ac 2 -i default -c:v libx264 -preset medium -tune zerolatency -c:a aac -b:a 128k -f nut - | ffplay -
ffmpeg移植ffmpeg的移植依赖于x264和x265
1、移植x264下载源码,创建build.sh脚本,内容如下。
12345678910111213141516#!/bin/bashmake cleanpath="/home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin"set_path=${PWD}/../expo ...
机器视觉、音视频开发
1、概述 ipc的英文是ipcamera,没入行之前认为这是嵌入式驱动相关的
工作,后来才知道不是。
基本的过程:采集图像,进行存储,进行传输。
IPC开发为目前嵌入式前沿技术最为密集的领域,
涉及AI,图像识别,人脸识别,动作识别,各种算法等。
1-1、原理
首先是外景的光线进入镜头,经过一定调焦,打到图像传感器上,
也就是sensor,转换成模拟信号,然后通过A/D转换,转换成数字信号。
然后经过DSP编码处理。(如果出现模糊等各种情况就可以进行追溯,
比如是镜头问题等)
数据消费中的其他指的是传给其他的平台,进行协议的对接。
1-2、方案介绍 当有的人问你,你们公司的摄像机是基于什么方案,什么平台做的
外围的配件、电机、摄像头、麦克风等一般都是从供应商拿的,而主控芯片,
就是从方案代理公司拿的,所以就是,主控是什么类型的,方案就是基于什
么来做的。一般的方案公司有:海思、富瀚、瑞芯微,全志、索尼。
所以就形成了一个上下游:芯片制造、芯片代理、方案代理、安防公司。
一般从方案公司拿到芯片和sdk。
sdk包:具体有arm板 ...