02 2020 档案

摘要:我们使用中断的目的,就是为了在中断发生时,才去读操作,避免像查询一样一直read,从而占据大量的CPU。 一、阻塞: 当进程在读取外部设备的资源(数据),资源没有准备好,进程就会休眠。 linux应用中,大部分的函数接口都是阻塞 scanf(); read(); write(); accept(); 阅读全文
posted @ 2020-02-29 23:41 朱果果 阅读(524) 评论(0) 推荐(0)
摘要:目录: 1、中断号 2、获取中断号 3、实现中断处理 4、中断编程—实现字符设备驱动框架 5、驱动实现将硬件数据传递给数据 6、示例 1、中断号 中断号是系统分配给每个中断源的代号,以便识别和处理。在采用向量中断方式的中断系统中,CPU必须通过它才可以找到中断服务程序的入口地址,实现程序的转移。 在 阅读全文
posted @ 2020-02-29 18:47 朱果果 阅读(3827) 评论(0) 推荐(0)
摘要:实现按键驱动,板上加载驱动出错,Oops信息如下: 可知,是因为使用了空指针,导致内核访问了非法地址,在源码中去看一下: 1 ... 2 //按键中断的处理函数 3 irqreturn_t key_irq_handler(int irqno, void *devid) 4 { 5 printk(" 阅读全文
posted @ 2020-02-29 18:08 朱果果 阅读(600) 评论(0) 推荐(0)
摘要:目录: 1、驱动与应用程序的设计思想 2、字符设备驱动编写步骤与规范 3、操作寄存器地址:readl / writel 4、实例:实现LED灯闪烁 1、驱动与应用程序的设计思想 用户态:应用程序 玩策略: 怎么去做 1, 一闪一闪 2,10s闪一次,也可以1s闪一次 3,一直亮 4,跑马灯 控制权是 阅读全文
posted @ 2020-02-28 20:32 朱果果 阅读(966) 评论(1) 推荐(0)
摘要:目录·: 1、概述 2、设备号、设备节点 3、字符设备驱动框架 4、申请设备号 5、创建设备节点 6、实现文件IO接口--fops 7、应用程序控制驱动 8、驱动程序控制外设 1、概述: linux中一切皆文件,设备也如此,并且以操作文件即文件IO的方式访问设备。 应用程序只能通过库函数中的系统调用 阅读全文
posted @ 2020-02-28 01:51 朱果果 阅读(1121) 评论(0) 推荐(0)
摘要:设备节点被创建在/dev下,是连接内核与用户层的枢纽,就是设备是接到对应哪种接口的哪个ID 上。 相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息在Linux中,所有设备都以文件的形式存放在/dev目录下,都是通过文件的方式进行访问,设备节点是Linux内核对设备的抽象,一个设备节点就是 阅读全文
posted @ 2020-02-27 11:54 朱果果 阅读(3162) 评论(0) 推荐(1)
摘要:目录: 1、Linux软件系统的层次关系 2、驱动程序的分类 3、驱动程序的开发步骤 1、Linux软件系统的层次关系 软件系统可分为:应用程序、库、操作系统(内核)、驱动程序 以点亮LED为例,分析各层间的写作关系 1)应用程序调用库提供的open函数打开代表LED的设备文件; 2)库根据open 阅读全文
posted @ 2020-02-26 23:09 朱果果 阅读(1165) 评论(0) 推荐(1)
摘要:目录: 1、驱动模块开发 编写驱动hello.c 编写Makefile insmod加载KO模块 lsmod查看系统加载的模块 rmmod卸载模块 2、模块ko参数传递 3、ko模块符号导出 新建math.c math.h 修改Makefile hello.c 调用模块符号 1、驱动模块开发 驱动代 阅读全文
posted @ 2020-02-26 21:07 朱果果 阅读(1148) 评论(0) 推荐(1)
摘要:volatile详解见:https://wenku.baidu.com/view/9ec1690eee06eff9aef80745.html volatile修饰的变量可以避免编译器的优化,即不会从存取速度较快的寄存器中访问变量,而是访问原始内存地址。因为变量在原始内存里的志可能被改变却不会同步其寄 阅读全文
posted @ 2020-02-25 19:54 朱果果 阅读(227) 评论(0) 推荐(0)
摘要:static部分转载于博文:static的作用 static在嵌入式C编程中很常见,现总结一下其作用: 1、隐藏 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性 示例:同时编译a.c 与 main.c 1 #include <stdio.h> 2 char a = ' 阅读全文
posted @ 2020-02-25 17:43 朱果果 阅读(553) 评论(0) 推荐(0)
摘要:黑盒移植 两种方式 1. 驱动编译进内核 选则源码目录 修改Makefile 修改Kconfig 2. 将驱动编译成独立的模块 配置为模块方式 通过修改Kconfig 使用make modules 编译为模块 装载模块 insmod xxx.ko 创建设备结点 mknod /dev/xxx c xx 阅读全文
posted @ 2020-02-25 16:03 朱果果 阅读(250) 评论(0) 推荐(0)
摘要:基于FS4412制作根文件系统 详见:系统移植实验手册 https://blog.csdn.net/m0_37542524/article/details/86485905 阅读全文
posted @ 2020-02-25 14:10 朱果果 阅读(172) 评论(0) 推荐(0)
摘要:黑盒移植,即在不用理解驱动程序的细节基础上进行移植 驱动移植的主要流程如下: 一、黑盒移植 1、将驱动编译进内核 如果内核中已经有了已经支持的驱动,那直接在menu上选配即可。若没有,则需要第三方的驱动或者自己写一个驱动,移植进内核。 1)将第三方驱动放到linux源码的driver目录中 拷贝LE 阅读全文
posted @ 2020-02-25 02:31 朱果果 阅读(1136) 评论(0) 推荐(0)
摘要:先了解一下FS4412开发板的硬件环境, 可以看到: 4412有8G内存,即 DDRⅢ 双速率SDRAM,可片上执行,一般为机器运行软件提供内存,掉电后数据丢失。 还有4G的eMMC,也就是Nand Flash,但是同时集成了主控芯片与接口,不可以片上执行,但掉电后数据不会丢失。 同时4412支持S 阅读全文
posted @ 2020-02-24 02:31 朱果果 阅读(1411) 评论(0) 推荐(0)
摘要:在上一节知道了,通过 命令 make xxx_config指令可以实现初步的配置,现在就来看看这个指令是怎样实现配置的。 一、查看顶层的Makefile 在上一节知道了,通过 命令 make xxx_config指令可以实现初步的配置,现在就来看看这个指令是怎样实现配置的。 1、查看顶层的Makef 阅读全文
posted @ 2020-02-21 19:31 朱果果 阅读(1343) 评论(0) 推荐(0)
摘要:在分析U-Boot源码之前,先了解uboot的编译过程 环境: 开发板:友善之臂的JZ2440,主控:S3C2440 ARM920t Uboot源码包:u-boot-1.1.6 一、解压、打补丁 二、配置 通过阅读 顶层的README 来了解Uboot配置与编译是一种很好的方法。 可知,要使用开发板 阅读全文
posted @ 2020-02-21 01:34 朱果果 阅读(231) 评论(0) 推荐(0)
摘要:以下内容源自于:韦东山老师的《嵌入式Linux应用开发 》 目的:了解Bootloader与内核交互的原理 由于Bootloader和内核交互是单向的,只能是B将参数传给内核,且不能同时运行,那传递参数方法就只有:Bootloader将参数放在某个约定的地方,再启动内核,内核启动后去这个地方获得参数 阅读全文
posted @ 2020-02-21 01:23 朱果果 阅读(450) 评论(0) 推荐(0)
摘要:目的: 分析Makefile在内核中的作用 Makefile的作用总结: 1)决定编译哪些文件? 2)怎样编译这些文件? 3)怎样连接这些文件,最重要的是他们的顺序如何? 1、linux内核中Makefile体系 顶层Makefile 所以Makefile的核心,根据不同平台,对各类target分类 阅读全文
posted @ 2020-02-20 20:40 朱果果 阅读(874) 评论(0) 推荐(0)
摘要:Linux 内核源代码的目录结构Linux 内核源代码包含如下目 ● arch :包含和硬件体系结构相关的代码,每个架构的CPU都对应一个目录,如i386、arm、 arm64、powerpc、mips 等。Linux 内核目前已经支持30 种左右的体系结构。在arch 目录下,存放的是各个平台以及 阅读全文
posted @ 2020-02-19 23:50 朱果果 阅读(3194) 评论(0) 推荐(0)
摘要:目的: 了解内核编译的过程 环境: ubuntu 14.04 s3c2440 arm-linux-gcc linux-2.22.6 u-boot 1.1.6 过程·: 1、解压缩 tar xvf 2、打补丁 patch -p1 <../ 补丁文件名 3、配置 方法a: make menuconfig 阅读全文
posted @ 2020-02-19 22:11 朱果果 阅读(295) 评论(0) 推荐(0)
摘要:(记一次错误的解决,转载网上的方法以便下次碰到能快速解决) 转:https://www.linuxidc.com/Linux/2011-08/41133.htm 提示错误: arm-linux-gcc: Command not found zPATH里有/usr/local/arm/2.95.3/b 阅读全文
posted @ 2020-02-19 20:18 朱果果 阅读(453) 评论(0) 推荐(0)
摘要:1、 将压缩包解压到一个指定的文件夹 例如 /home/linux/toolchains 解压 tar xvf gcc-4.6.4.tar.xz 2、 添加路径到环境变量 sudo vi /etc/bash.bashrc 为了不用每次手工设置PATH,在/etc/environment里面修改路径, 阅读全文
posted @ 2020-02-19 16:36 朱果果 阅读(419) 评论(0) 推荐(0)
摘要:首先贴出参考的博客:apt-get命令 更换 Ubuntu 的软件源 apt-get用于安装,升级和清理包, apt-cache用于查找新包 1、sudo apt-get update 更新数据库,软件源 更新的时候可以看到有三种情况: 1)hit:包版本没有变化 2)ign:包被忽略了。可能有各种 阅读全文
posted @ 2020-02-19 11:29 朱果果 阅读(4267) 评论(0) 推荐(0)
摘要:Linux系统软件安装更新下载太慢解决方法 更换国内源 vim /etc/apt/sources.list 直接删除全部内容也可以直接在文前添加新的APT源 选择适合自己较快的源:#阿里云deb http://mirrors.aliyun.com/kali kali-rolling main non 阅读全文
posted @ 2020-02-18 21:24 朱果果 阅读(6781) 评论(0) 推荐(0)
摘要:转载自:什么是重定位?为什么需要重定位?(嵌入式下) 一、必须知道的几个概念。 1、链接地址和运行地址。 ①运行地址,顾名思义就是程序运行的时候的地址,也就是你用工具将代码下载到RAM的那个地址,也叫加载地址。 ②链接地址,由链接脚本指定的地址。为什么需要链接脚本指定地址呢?你想一下,在c语言编程中 阅读全文
posted @ 2020-02-18 11:15 朱果果 阅读(246) 评论(0) 推荐(0)
摘要:存储器: 按照存储介质的不同,将存储器分为光学存储、半导体存储和磁性存储三大类。 下面在半导体存储器大类中,按照存储器的实现技术原理来进行详细分类。 光学存储 CD DVD 磁性存储 磁带、软盘、机械硬盘 半导体存储 RAM(Random-Access Memory): 随机存取存储器 SRAM(S 阅读全文
posted @ 2020-02-18 11:10 朱果果 阅读(4589) 评论(0) 推荐(1)
摘要:转载:https://cloud.tencent.com/developer/article/1477034 网上各种相关的配置说明,但是都没一个完整的,在这里楼主结合实战亲测,这一整套包含各种情况 1.安装VMware tools 2.解压到任意一个文件夹 tar -xzvf VMwareTool 阅读全文
posted @ 2020-02-17 17:55 朱果果 阅读(319) 评论(0) 推荐(0)
摘要:目标: 1、了解S3C2440的时钟体系结构 2、掌握通过设置MPLL改变系统时钟的方法 一、S3C2440的时钟体系结构 什么是时钟体系? ARM的时钟系统包括4部分,分为晶体振荡器、唤醒定时器、锁相环(PLL)和VPB分频器,是一种电路。 时钟系统有什么作用? 时钟是嵌入式系统的脉搏,处理器内核 阅读全文
posted @ 2020-02-15 19:18 朱果果 阅读(4152) 评论(0) 推荐(0)
摘要:UART —— Universal Asynchronous Receiver/Transmitter —— 通用异步收发器 一、UART简介 (强烈推荐一篇详细介绍UART的博客:https://www.cnblogs.com/mylinux/p/4078576.html) UART是异步串口通信 阅读全文
posted @ 2020-02-12 01:24 朱果果 阅读(5594) 评论(0) 推荐(1)
摘要:基础知识: 微型计算机中,通信有两种方式:串行通信、并行通信 1)串行通信 串行通信是指计算机与IO设备之间数据传输的各位是按顺序逐位进行传送,通常数据在一根数据线上传输。传输速度慢,传输设备成本低,适合远程通信,但是一些差分串行通信总线(RS-485,USB等)传输距离远,抗干扰强,速度也较快。 阅读全文
posted @ 2020-02-11 16:12 朱果果 阅读(2144) 评论(0) 推荐(0)
摘要:在操作寄存器时,遇到概念上的理解问题。混淆了内存地址与内存空间 首先,读懂指令 ldr r0,=0x11000c40 //0x11000c40是寄存器GPX2CON的地址,将这个地址写入r0寄存器的空间 ldr r1,[r0] //将r0空间的地址所指向的4字节数据,读入r1的内存空间,即r1储存了 阅读全文
posted @ 2020-02-09 13:13 朱果果 阅读(2326) 评论(0) 推荐(0)
摘要:arm对异常(中断)处理过程 1 初始化::: a 设置中断源,让它可以产生中断:: b 设置中断控制器(可以屏蔽某个中断,优先级):: c 设置CPU总开关,(使能中断) 2 执行其他程序:正常程序 3 产生中断:按下按键 >中断控制器 >CPU 4 cpu每执行完一条指令都会检查有无中断/异常产 阅读全文
posted @ 2020-02-08 14:55 朱果果 阅读(330) 评论(0) 推荐(0)
摘要:汇编指令:逻辑指令、算术指令、跳转指令 .text /* 逻辑指令 */ mov r7,#0x88 @ and r0,r1,#0xFF //r0=r1&0xFF @ orr r7,r7,#0xffff77 //r7=r7&0x88,清除7号3号位,但立即数太大,报错 bic r7,r7,#0x88 阅读全文
posted @ 2020-02-07 17:45 朱果果 阅读(1746) 评论(0) 推荐(0)
摘要:1、 作者:匿名用户链接:https://www.zhihu.com/question/20795067/answer/16259037 能进行网络编程 1.如果你说你会select,epoll,iocp模型,那会让对方觉得更靠谱2.如果你说出你做过im,下载之类那会让对方来兴趣.3.如果你说设计了 阅读全文
posted @ 2020-02-05 17:40 朱果果 阅读(599) 评论(0) 推荐(0)
摘要:#如果没有发现ssh进程说明ssh没有启动 username@hostname:~$ ps -e | grep ssh #在服务端启动服务username@hostname:~$ service ssh startssh: unrecognized service #在本机远程到服务端bogon:~ 阅读全文
posted @ 2020-02-05 01:34 朱果果 阅读(3454) 评论(0) 推荐(1)
摘要:1. vi 编辑器中跳到文件的第一行: a 输入 :0 或者 :1 回车 b 键盘按下 小写 gg 2.vi 编辑器跳到文件最后一行: a 输入 :$ 回车 b 键盘按下大写 G c 键盘按 shift + g (其实和第二种方法一样) 阅读全文
posted @ 2020-02-02 09:46 朱果果 阅读(2573) 评论(0) 推荐(0)
摘要:引用结构体成员时,有时用点运算符( . ),时而是用箭头运算符( -> );两者之间的使用有什么区别? 相同点:两者都是二元操作符,而且右边的操作数都是成员的名称。不同点:点运算符( . )的左边操作数是一个结果为结构的表达式; 箭头运算符( -> )的左边的操作数是一个指向结构体的指针。 1 ty 阅读全文
posted @ 2020-02-02 00:15 朱果果 阅读(3821) 评论(0) 推荐(0)
摘要:调试问题一:执行服务器成功后,一启动客户端,服务器就退出。 linux@linux:~/cbase/dic$ ./server 192.168.31.123 5001open DATABASE success.Server starting ... OK!Connect success!client 阅读全文
posted @ 2020-02-01 18:08 朱果果 阅读(154) 评论(0) 推荐(0)