华清创客学院早期学习总结
文章平均质量分 95
华清创客学院早期学习总结
clear code
一路向前,莫问前程,前途似锦
展开
-
嵌入式内核及驱动开发-01设备驱动环境搭建(交叉开发, tftp,nfs,内核启动,根文件系统制作)
文章目录Linux驱动开发环境搭建ubuntu中配置编译环境设置交叉工具链:设置环境变量:更新脚本:运行开发a,通过tftp去启动内核b,通过nfs去挂载rootfs可以开始去编写代码--开发驱动a, 编译内核移植dm9000配置内核:b, 编写驱动代码c,编译驱动代码--Makefile(被读取两次: make 2,内核源码中Makefile)d,加载koLinux驱动开发环境搭建ubun...原创 2019-06-14 09:15:17 · 1032 阅读 · 3 评论 -
嵌入式内核及驱动开发-06 中断编程,阻塞,非阻塞,多路复用select和poll,中断下半部,tasklet和work
文章目录实现文件IO模型之一阻塞,等同于休眠例—阻塞方式驱动代码 key_drv.c应用程序key_test.c终端信息非阻塞例—非阻塞模式驱动代码key_drv.c应用程序 key_test.c终端信息实现文件IO模型之一阻塞,等同于休眠文件io模型: 1,非阻塞 2,阻塞 3,多路复用--select/poll 4, 异步信号通知faync阻塞: 当进程在读取外部设备的...原创 2019-06-18 15:49:40 · 743 阅读 · 0 评论 -
嵌入式内核及驱动开发-08输入子系统框架 (输入子系统,输入设备驱动程序编写,应用程序读取输入设备数据)
文章目录linux字符设备驱动编程linux程序框架的概念字符设备高级驱动课程初级驱动和高级驱动的不同特点输入子系统学习输入子系统的作用和框架输入子系统的编程方式前提条件make menuconfig 配置编写步骤(主要流程):linux字符设备驱动编程1,实现入口函数 xxx_init()和卸载函数 xxx_exit()2,申请设备号 register_chrdev_region (与内...原创 2019-06-23 09:58:58 · 1246 阅读 · 0 评论 -
嵌入式内核及驱动开发-07linux驱动之平台总线(设备驱动模型,sysfs文件系统,device的构建和注册,driver的构建和注册总线,bus匹配)
文章目录设备驱动模型和sysfsLinux设备驱动模型的由来设备驱动模型busdevicedriverSysfs文件系统常用API介绍配对函数(match)探测函数(probe)卸载函数(remove)总线模型编程示例-总线模型编程自定义总线 mybus.c定义设备 mydev.c编写驱动 mydrv.c终端信息如何实现总线匹配平台总线模型平台总线编程接口Pdev注册和注销Pdrv注册和注销获取资...原创 2019-06-20 21:28:23 · 1427 阅读 · 0 评论 -
嵌入式内核及驱动开发-04 字符设备驱动编写(readl-writel)
文章目录驱动和应用程序的设计思想应用程序和驱动扮演的是什么角色编写字符设备驱动的步骤和规范步骤规范:操作寄存器地址的方式 readl/writel():传统的方式内核提供的方式例—LED灯闪烁驱动代码 led_drv.c应用程序 led_test.cMakefile驱动和应用程序的设计思想应用程序和驱动扮演的是什么角色用户态:应用程序 玩策略: 怎么去做 1, 一闪一闪 ...原创 2019-06-16 00:09:38 · 839 阅读 · 0 评论 -
嵌入式内核及驱动开发-09IIC子系统框架使用(I2C协议和时序,I2C驱动框架,I2C从设备驱动开发,MPU6050硬件连接,MPU6050数据读取,MPU6050从设备驱动编写)
文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号I2c总线写时序I2c总线读时序I2c驱动框架I2C子系统软件框架常用的对象设备驱动对象i2c_client—挂在I2C总线上的I2C从设备adapter i2c 控制器对象数据包对象读写数据设备树中添加MPU6050信息内核选配添加设备树节点编写驱动程序 mpu6050_i2c_drv.cI2c协议和时序I2c介绍I2C(In...原创 2019-06-27 13:55:17 · 845 阅读 · 0 评论 -
嵌入式内核及驱动开发-05 中断编程(添加(定义)设备节点,获取中断号,申请中断,字符设备驱动框架,传递数据给用户)
文章目录回顾中断号和中断申请中断号获取中断号的方法(添加设备节点):系统中已经定义好的查看原理图,找到按键所对应的中断号SPI Port No可以在设备树文件arch/arm/boot/dts/exynos4x12-pinctrl.dtsi中看到在编程过程中,需要定义自己的节点–描述当前设备用的中断号在驱动中去通过代码获取到中断号,并且申请中断(实现中断处理方法)实现字符设备驱动框架驱动中将硬件所...原创 2019-06-17 10:03:32 · 1197 阅读 · 0 评论 -
嵌入式内核及驱动开发-10设备树(设备树,设备树文件,dtb文件,of解析dts节点的API,获取属性,验证dts的中断信息)
文章目录DTS设备树的由来和使用Linux设备树的由来-为什么会有设备树快速编译设备树---DTC (device tree compiler)快速了解设备树---编译设备树文件Linx设备树的由来--什么是设备树运行流程分析节点 nodepropertycompatible属性#address-cells和#address-siz属性reg属性中断信息属性--interrupts和interru...原创 2019-06-28 19:39:00 · 2031 阅读 · 0 评论 -
嵌入式内核及驱动开发-03字符设备驱动基础(申请设备号,创建设备节点,实现文件操作对象,应用控制驱动,copy_to_user,ioremapled,灯驱动)
文章目录字符设备、块设备、网络设备基础概念字符设备块设备网络设备字符设备驱动框架(用户空间和内核空间)设备号,设备节点字符设备驱动框架字符设备驱动向系统申请—主设备号示例-主设备号申请测试创建设备节点手动创建测试自动创建(通过udev/mdev机制)创建一个类创建一个设备文件销毁动作:例—代码测试在驱动中实现文件io的接口,应用程序可以调用文件io驱动中实现文件io操作接口:struct file...原创 2019-06-15 10:59:37 · 1153 阅读 · 0 评论 -
嵌入式内核及驱动开发-02驱动模块开发(编写驱动ko,内核编译,设备树文件的编译,网卡移植,简单驱动代码的编写,驱动Makefile编写,insmod加载ko模块,模块ko参数传递)
文章目录驱动模块开发编译驱动代码hello.c驱动代码hello.c编写Makefile例—Makefileinsmod 加载ko模块lsmod 查看系统中装载了哪些模块rmmod 卸载ko模块模块ko参数传递ko模块的符号导出新建mymath.c新建mymath.hhello.c调用模块符号驱动模块开发驱动代码需要有四个部分 1.头文件 2.驱动模块装载和卸载函数入口声明 3.实现模块...原创 2019-06-14 10:49:06 · 1110 阅读 · 0 评论 -
嵌入式系统移 -07植根文件系统制作(根文件系统基本概念,根文件系统设备,访问根文件系统制作)
文章目录根文件系统基本概念什么是根文件系统?根文件系统主要目录结构程序文件的放置定制应用程序库文件的放置Linux 设备文件举例字符设备举例块设备举例设备的主设备号次设备号创建设备节点基本的设备节点Linux系统的引导过程制作根文件系统文件系统制作步骤BusyBox项目构建系统命令BusyBox工具安装制作根文件系统的内容测试配置文件一文件 /etc/inittab文件 /etc/init.d/r...原创 2019-06-12 09:49:08 · 1283 阅读 · 0 评论 -
嵌入式系统移植-05Linux内核移植及网卡移植
文章目录Linux内核 配置编译下载内核源码Linux系统中解压修改Makefile指定交叉编译工具链导入配置 make exynos_defconfig配置内核 make menuconfig编译内核 make uImage编译设备树 make dtbs网卡移植开发板上电重启,内核启动以后,卡在了 Starting kernel ...更换uboot之后重新上电,内核启动以后,发现内核有崩溃信息...原创 2019-06-11 10:10:32 · 1095 阅读 · 0 评论 -
嵌入式系统移植-03U-boot启动流程, U-boot移植
文章目录U-BOOT 启动流程u-boot启动三个2启动步骤(重点)U-boot 启动源码分析第一条指令位置u-boot的启动入口基本硬件初始化大部分硬件初始化BootLoader两种模式切换u-boot 启动分析u-boot环境变量设置u-boot启动阶段linux内核启动阶段根文件系统阶段(可运行应用程序)U-BOOT 移植方法U-BOOT 启动流程u-boot启动三个2两个阶段:汇...原创 2019-06-06 22:37:18 · 1572 阅读 · 0 评论 -
嵌入式系统移植-02Bootloader移植(bootloader基本概念,U-boot常用命令和配置编译)
文章目录Bootloader 介绍什么是BootloaderBootloader 介绍什么是Bootloader原创 2019-06-06 22:00:14 · 3291 阅读 · 0 评论 -
嵌入式系统移植-04Linux内核分析(Linux内核基本概念,Linux内核启动分析,Linux内核调试方法)
文章目录Linux内核基本概念Linux内核主流的 Linux 发行版Linux 内核的特性Linux内核版本Linux内核子系统Linux内核模块结构图linux内核编译(移植好的)编译内核 make uImage编译设备树 make dtbsLinux内核代码结构(1)Linux系统源代码目录结构(2)Linux内核启动分析嵌入式系统启动信息分析u-boot启动阶段linux内核启动阶...原创 2019-06-09 14:43:36 · 1293 阅读 · 0 评论 -
嵌入式系统移植-06第三方驱动移植(驱动编译进内核Makefile,图像化配置Kconfig,驱动模块,黑白盒对比)
文章目录第三方驱动 黑盒移植驱动编译进内核Makefile选择驱动存放目录 (或任意目录)改Makefile让驱动编译进内核(同步修改,对应目录下的Makefile)改Kconfig (界面可配置)测试驱动创建设备文件图形化配置Kconfigmake menuconfig、Makefile、Kconfig、.config 三者的关系配置Kconfig在Kconfig中添加一个灯的选项修改Make...原创 2019-06-11 11:18:15 · 999 阅读 · 0 评论 -
嵌入式系统移植-01嵌入式基本概念,嵌入式开发环境搭建,目标机搭建,TFTP服务搭建,NFS服务搭建
文章目录系统移植概述及环境搭建嵌入式基本概念嵌入式系统的应用领域什么是嵌入式系统用嵌入式系统硬件组成部分通用嵌入式系统软件组成部分Linux 在嵌入式中应用的条件与前景嵌入式Linux内核结构Android系统嵌入式开发环境搭建嵌入式Linux交叉开发环境硬件基本组成开发板启动流程搭建嵌入式Linux开发环境的主要工作开发主机搭建ubuntu环境目标机搭建TFTP 服务主机端tftp服务器配置NF...原创 2019-06-06 10:43:10 · 1288 阅读 · 0 评论 -
Linux应用程序设计-04_文件锁
文件锁这一节将讨论的是在文件已经共享的情况下如何操作,也就是当多个程序共同操作一个文件的情况。Linux 中通常采用的方法是给文件上锁,来解决对共享的资源的竞争。文件锁包括建议性锁和强制性锁。建议性锁要求每个相关程序在访问文件之前检查是否有锁存在,并且尊重已有的锁。一般情况下,不建议使用建议性锁,因为无法保证每个程序都自动检查是否有锁。而强制性锁是由内核执行的锁,当一个文件被上锁进行写...原创 2019-05-08 09:38:17 · 425 阅读 · 1 评论 -
Linux 进程间通信_14-线程(线程,线程间通信--互斥,临界资源/临界区/互斥机制/互斥锁,pthread_mutex_init()/pthread_mutex_lock/unlock())
线程基础每个用户进程有自己的地址空间系统为每个用户进程创建一个 task_struct来描述该进程该结构体中包含了一个指针指向该进 程的虚拟地址空间映射表实际上task_struct 和地址空间映射表一起用来表示一个进程由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,也被称为线程...原创 2019-05-13 16:32:19 · 911 阅读 · 0 评论 -
Linux应用程序设计_08-进程间通信-管道
Linux下进程间通信概述常用的进程间通信方式传统的进程间通信方式无名管道(pipe)有名管道(fifo)信号(signal)System V IPC对象4. 共享内存(share memory)5. 消息队列(message queue)6. 信号灯(semaphore)BSD套接字(socket)无名管道这里所说的管道主要指无名管道,它具有如下特点:只能用于...原创 2019-05-11 10:21:57 · 449 阅读 · 0 评论 -
Linux应用程序设计_12-进程间通信-信号灯
信号灯信号灯(semaphore),也叫信号量集。它是不同进程间或一个给定进程内部不同线程间同步的机制。信号灯种类:posix有名信号灯posix基于内存的信号灯(无名信号灯)System V信号灯(IPC对象)信号灯特点:System V 信号灯是一个或多个计数信号灯的集合可同时操作集合中的多个信号灯申请多个资源时避免死锁二值信号灯:值为0或1。与互斥锁类...原创 2019-05-11 20:51:07 · 398 阅读 · 0 评论 -
Linux应用程序设计-02_标准I/O
标准 I/O – 按对象读写下列函数用来从流中读写若干个对象:#include <stdio.h>size_t fread(void *ptr, size_t size, size_t n, FILE *fp);size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);成功返回读写的对象个数;出错时返回E...原创 2019-05-07 08:35:01 · 362 阅读 · 0 评论 -
Linux应用程序设计_09-进程间通信-信号通信
信号通信信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程信号的生存周期用户进程对信号的响应方式:...原创 2019-05-11 15:31:41 · 267 阅读 · 0 评论 -
Linux应用程序设计-03_文件I/O
文件 I/O – 介绍什么是文件I/O?posix(可移植操作系统接口)定义的一组函数不提供缓冲机制,每次读写操作都引起系统调用核心概念是文件描述符访问各种类型文件Linux下, 标准IO基于文件IO实现文件 I/O – 文件描述符每个打开的文件都对应一个文件描述符文件描述符是一个 非负整数。Linux为程序中每个打开的文件分配一个文件描述符文件描述符从0开始分配,依次递增。...原创 2019-05-05 15:02:35 · 1273 阅读 · 0 评论 -
Linux应用程序设计-06_wait()和waitpid()
进程回收子进程结束时由父进程回收孤儿进程由init进程回收若没有及时回收会出现僵尸进程wait()和waitpid()(1)函数说明:wait()函数用于使父进程(也就是调用 wait()的进程)阻塞(暂时停止目前进程的执行),直到一个子进程结束或者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则 wait()会立即返回-1。子进程的结束状态值会由参数s...原创 2019-05-08 09:37:18 · 336 阅读 · 0 评论 -
Linux应用程序设计_07-守护进程
守护进程守护进程(Daemon)是Linux三种进程类型之一,称为精灵进程,是运行在后台的一种特殊进程;它独立于控制终端并且周期性地执行某种任务或等待处理发生的事件。 通常在系统启动时运行,系统关闭时结束**;守护进程不受用户登陆与注销的影响,它一直在运行着**。Linux系统中大量使用,很多服务程序以守护进程形式运行转载这位博主的文章,感谢分享https://blog.csdn.net/...原创 2019-05-08 15:11:58 · 413 阅读 · 1 评论 -
Linux应用程序设计_10-进程间通信-共享内存
System V IPCIPC 对象包含: 共享内存、消息队列和信号灯集每个IPC对象有唯一的IDIPC对象创建后一直存在,直到被显式地删除每个IPC对象有一个关联的KEYipcs / ipcrmSystem V IPC - keySystem V IPC – ftok#include <sys/types.h>#include <sys/ipc.h>...原创 2019-05-11 16:25:51 · 821 阅读 · 0 评论 -
Linux应用程序设计_05-进程
进程概念程序存放在磁盘上的指令和数据的有序集合(文件)静态的进程执行一个程序所分配的资源的总称进程是程序的一次执行过程动态的,包括创建、调度、执行和消亡程序和进程的区别:转载了这篇博主,介绍的很详细,感谢他的文章分享。https://blog.csdn.net/fuqin163/article/details/1546919进程是程序的一次运行活动,属于一种动态的概念...原创 2019-05-06 16:15:41 · 507 阅读 · 0 评论 -
Linux 进程间通信_13-(system v 信号灯+system v 共享内存)实例
https://www.linuxidc.com/Linux/2011-10/44832.htm系统V共享内存原理进程间需要共享的数据被放在一个叫做IPC共享内存区域的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。系统V共享内存通过shmget获得或创建一个IPC共享内存区域,并返回相应的标识符。内核在保证shmget获得或创建一个共享内存区,初始化该共享内存区...原创 2019-05-13 10:36:20 · 291 阅读 · 0 评论 -
Linux应用程序设计-01_标准I/O
文件基础概念:一组相关数据的有序集合在显示文件的属性通常会以如下形式进行显示:第1个字母:代表文件类型第2~4字母:代表用户的权限第5~7字母:代表用户组的权限第8~10字母:代表其他的用户的权限文件属性文件类型-常规文件,指ASCII文本文件、二进制可执行文件,以及硬链接文件d目录文件bblock device 即块设备文件,如硬盘;支持以...原创 2019-05-06 23:37:32 · 839 阅读 · 0 评论 -
Linux应用程序设计_11-进程间通信-消息队列
消息队列消息队列是IPC对象的一种消息队列由消息队列ID来唯一标识消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等。消息队列可以按照类型来发送/接收消息消息队列的操作包括创建或打开消息队列、添加消息、读取消息和控制消息队列创建或打开消息队列使用的函数是msgget,这里创建的消息队列的数量会受到系统消息队列数量的限制添加消息使用的函数是msgsnd,按照类型把消...原创 2019-05-11 17:07:07 · 446 阅读 · 0 评论 -
Linux网络编程基础-09_广播、组播
文章目录广播广播发送setsockopt广播发送示例广播接收代码示例头文件sender.creceiver.c组播网络地址组播发送组播接收加入多播组组播收发 — 示例头文件sender.crecviver.c广播前面介绍的数据包发送方式只有一个接受方,称为单播如果同时发给局域网中的所有主机,称为广播只有用户数据报(使用UDP协议)套接字才能广播广播地址以192.168.1.0 (25...原创 2019-05-20 21:04:00 · 598 阅读 · 0 评论 -
Linux网络编程基础-05_TCP/IP网络编程-UDP循环服务器
文章目录UDP服务器端流程UDP客户端流程UDP编程API头文件Server.cClient.cUDP服务器端流程UDP客户端流程UDP编程API头文件#ifndef __MAKEU_NET_H__#define __MAKEU_NET_H__#include <stdio.h>#include <string.h>#include <uni...原创 2019-05-20 15:31:24 · 565 阅读 · 0 评论 -
Linux网络编程基础-10_UNIX域套接字
文章目录UNIX域套接字本地地址结构填充地址结构UNIX域(流式)套接字服务器端客户端UNIX域((用户数据报))套接字服务器端客户端示例代码Net.hServer.cClient.cUNIX域套接字socket同样可以用于本地通信创建套接字时使用本地协议PF_UNIX(或PF_LOCAL)。socket(AF_LOCAL, SOCK_STREAM, 0)socket(AF_LO...原创 2019-05-20 21:54:59 · 625 阅读 · 0 评论 -
Linux网络编程基础-07_TCP、IP协议原理
文章目录TCP/IP协议网络封包格式以太网头IP头TCP头UDP头TCPTCP三次/四次握手TCP/IP协议网络封包格式以太网头IP头TCP头UDP头TCPTCP三次/四次握手https://blog.csdn.net/qq_39521554/article/details/79717895...原创 2019-05-20 16:26:55 · 515 阅读 · 0 评论 -
Linux网络编程基础-01_网络基础知识
Internet的历史Internet-“冷战”的产物1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project Agency),即国防部高级研究计划署,简称ARPA1968年6月DARPA提出“资源共享计算机网络” (Resource Sharing C...原创 2019-05-13 21:05:26 · 671 阅读 · 0 评论 -
Linux网络编程基础-03_TCP/IP网络编程
网络编程相关APIsocket() 创建套接字bind() 绑定本机地址和端口connect() 建立连接listen() 设置监听套接字,把主动套接字变成动套接字accept() 接受TCP连接 ,阻塞等待客户端连接请求recv(), read(), recvfrom() 数据接收send(), write(),sendto() 数据发送close(), shutdown() ...原创 2019-05-15 09:54:07 · 943 阅读 · 0 评论 -
Linux网络编程基础-04_TCP/IP网络编程-并发服务器
服务器模型在网络程序里面,通常都是一个服务器处理多个客户机。为了处理多个客户机的请求, 服务器端的程序有不同的处理方式。目前最常用的服务器模型.循环服务器:循环服务器在同一个时刻只能响应一个客户端的请求并发服务器:并发服务器在同一个时刻可以响应多个客户端的请求循环服务器模型TCP服务器TCP服务器端运行后等待客户端的连接请求。TCP服务器接受一个客户端的连接后开始处理...原创 2019-05-15 15:40:32 · 745 阅读 · 1 评论 -
Linux网络编程基础-02_网络基础知识-Socket 简介
Socket 简介是一个应用编程接口是一种特殊的文件描述符 (everything in Unix is a file)对它执行IO的操作函数,比如,read(),write(),close()等操作函数并不仅限于TCP/IP协议面向连接 (Transmission Control Protocol - TCP/IP)无连接 (User Datagram Proto...原创 2019-05-13 21:27:43 · 368 阅读 · 0 评论 -
Linux网络编程基础-06_IO模型和多路复用模型
文章目录IO模型阻塞I/O 模式读阻塞-以read函数为例:写阻塞非阻塞模式I/O非阻塞模式的实现多路复用I/Oselect() 实现多路复用TCP多路复用IO复用select()示例头文件Server.cClient.cIO模型在UNIX/Linux下主要有4种I/O 模型:阻塞I/O:最常用非阻塞I/O:可防止进程阻塞在I/O操作上,需要轮询I/O 多路复用:允许同时对多个I...原创 2019-05-20 16:02:12 · 703 阅读 · 0 评论