
Linux
文章平均质量分 77
小窝VS小蜗
这个作者很懒,什么都没留下…
展开
-
第十五天:Cortex-A9配置Linux应用开发环境
一、宿主机开发环境:1、主机系统及内核版本 :Centos 6.5 2.6.32-431.el6.i6862、 gcc版本:gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)3、交叉编译器版本:arm-linux-gcc (ctng-1.8.1-FA) 4.5.1二、开发板介绍 1、开发板型号:Tiny4412SDK-1312-S7原创 2016-06-09 14:22:47 · 4391 阅读 · 0 评论 -
Yocto构建P1010rdb开发板linux系统
Yocto 是一个开源社区,它通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统。本教程中使用Yocto构建P1010rdb开发版的linux系统。一、Linux系统环境准备: 1、创建新的用户hello (yocto要在非root用户下使用) useraddr hello 2、重启电脑,进入hello用户中。在/home/hello中创建yoc原创 2016-06-09 14:24:33 · 1851 阅读 · 1 评论 -
第四十一天:Linux内核栈
linux3.5内核中为所有进程(包括内核进程和用户进程)分配8k或4k的内核栈(可以在内核编译的时候选择),在模块代码中分配的栈内存就是在内核栈中,写模块代码如果要在堆中分配内存,则要使用kmalloc或vmalloc来分配,这是后话。 内核栈的栈底存放这thread_info, 通过获取内核栈,以得到thread_info的信息,thread_info里面有一个指向task_struct原创 2016-06-09 14:24:23 · 5001 阅读 · 0 评论 -
第四十天:编译可加载模块
linux刚刚开始的时候仅仅支持intel 386 ,后来不断的被移植到越来越多的平台上,包括ARM ,POWERPC,所有的代码设备驱动代码都编译到内核中,这明显不现实,这时候就需要通过内核模块的形式来加载驱动。当然模块不一定是驱动,也可以是为驱动提供某种功能。 现在先编写一个简单的linux模块。 1 #include 2 #include 3 4 MODULE原创 2016-06-09 14:24:19 · 924 阅读 · 0 评论 -
第三十九天:linux内核裁剪
培训的第四阶段:通过编写驱动,从应用层,内核层,再到底层硬件之间的关系。明白内核驱动的意义。现在开始才是重头戏,前面的都是铺垫。 正式编写驱动前,要先了解linux内核代码的组成。linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进程间通信。linux源代码用来实现这些功能,linux源码包在source_code目录下的linux-3.5-2013102原创 2016-06-09 14:24:14 · 20815 阅读 · 1 评论 -
第三十八天:Tiny4412驱动开发之外部中断
在三天前学习按键驱动的时候,按键通过轮循的方式,一直在等待被按下,这时候系统不能够完成其它的操作,这明显是不科学的,可以使用外部中断解决这个问题。 在Tiny4412中中断分为三种 分别是软件通用中断(SGI),私有设备中断(PPI),共享设备中断(SPI)。 一共有160个中断号,中断表在Tiny4412手册的745页。前篇写的看门狗中断属于PPI,今天的实验所使用的是SPI。也可以原创 2016-06-09 14:24:10 · 2653 阅读 · 1 评论 -
第三十七天:Tiny4412驱动开发之看门狗中断
1. 看门狗原理 Watchdog原理上就是一个定时器。定时器timer对时钟进行计数,当定时器溢出时,产生复位信号,使得整个系统复位。在程序或嵌入式系统中,需要 定期的对看门狗timer进行复位重新计数,定时器不会溢出复位系统,从而保证系统的正常运行。当某种原因(例如干扰)引起程序跑飞或者进入死循环时,程 序不能定期的复位看门狗timer, 计数溢出产生复位信号,导致系统复位。原创 2016-06-09 14:24:05 · 3742 阅读 · 0 评论 -
第三十七天:Tiny4412驱动开发之二级跳转
ARM五级流水线:取值,译码,执行,访存,回写。未定义指令异常和SWI软中断发生在译码阶段,其它异常发生在执行阶段。 现在假设有五条指令,三指令正在执行的时候,四指令在译码过程中发生未定义指令异常,跳转到异常处理程序回来后,因为 PC指向五指令,所以继续执行五指令的内容。 但是,如果程序在三指令执行期间发生错误,处理回来后到达五指令,把四指令跳过了。解决方式是在处理的把PC的值原创 2016-06-09 14:24:02 · 517 阅读 · 0 评论 -
第三十六天:Tiny4412驱动开发之模式跳转
ARM支持七种模式,如下图所示: 1、 User Mode:用户模式。 2、FIQ Mode:快速中断模式。 3、 IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。 4、 Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。 5、 Abort Mode:所有同内存保护相关原创 2016-06-09 14:23:58 · 627 阅读 · 0 评论 -
第三十五天:Tiny4412驱动开发之配置MMU
MMU表示内存管理单元,负责虚拟内存映射到物理内存。 虚拟地址映射到物理地址的关键是构建映射表。MMU就是利用映射表格将虚拟地址转换成物理地址。虚拟地址在32系统中为4G,地址占4字节,如果映射表格中虚拟地址和物理地址是一一对应的关系,一条记录就占8字节,那么映射表就要32G.这明显是不合理的。 于是通过二级映射解决这个问题。地址共32位,把前12位作为基地址,后20位作为偏移量,原创 2016-06-09 14:23:55 · 1013 阅读 · 0 评论 -
第三十四天:Tiny4412驱动开发之按键驱动与蜂鸣器驱动
编写按键驱动的过程和编写LED灯的驱动类似。区别在于按键是在底板上的。要从底板的电路图开始看。 使用key为关键字查找电路图: 可以得知的信息:按键松开时候XEINT26为高电平。按下时候为低电平。所以要判断按键是否被按下,就要检测XEINT26的状态。 使用XEINT26为关键字,在核心板上查看其定义。找到下图: XEINT26在核心板上链接到GPX3_2原创 2016-06-09 14:23:51 · 2801 阅读 · 0 评论 -
第三十三天:Tiny4412驱动开发之LED驱动和u-boot移植
从今天开始进入驱动开发的课程的学习,共完成三件事情。一:u-boot的简单移植,二:uboot中编写helloword程序 三:开发板中led灯的驱动编写,包括led点亮,闪烁,跑马,流水。 一:u-boot的简单移植 1.进入开发板提供的源码文件包,解压uboot源码包。 cd /home/bunfly/source_code/ tar xf uboot_tiny原创 2016-06-09 14:23:48 · 2382 阅读 · 0 评论 -
第二十七、二十八天:网络数据封装及各层数据的发送
这几天的课程给了我们足够多的时间编写代码,让我们更熟练使用套接字编程。课程的代码也更多了。几个要实现的代码:编写抓包程序,封装网络数据包,网络层数据发送,编写简易的web服务器,arp应用层数据分析,实现ftp客户端。使用http实现简单的文件下载器。 为了对网络五层有更加深入的了解,通过下面的程序对网卡的数据进行抓包分析。实现类似与wireshark的功能。 1 #incl原创 2016-06-09 14:23:32 · 541 阅读 · 0 评论 -
第二十五、二十六天:基于UDP的网路聊天程序
连续四天学习套接字的编程,可见套接字的重要性了。基于TCP和UDP分别写了两个程序。一是利用TCP实现一个服务器对多个客户端,客户端你发送信息,服务器就从事先准备好的五个字符串中随机回复一条。另一个是利用UDP实现两个人的对话,对话时可以是多个信息同时输入。 先是第一个程序。要实现一对多,就要使用线程编程,服务器端在不断监听中,如果有连接请求的话,就用通过accept函数接受并创建一个线程原创 2016-06-09 14:23:27 · 735 阅读 · 0 评论 -
第十七天:APCS和container_of宏
APCS 全称:ARM 过程调用标准 如果要写用来与编译后的 C 连接的汇编代码,则必须使用 APCS。 今天的课程最终的两个目标:使用符合APCS标准的汇编写输出hello world 以及编写container_of宏 。这两个的推导过程比较复杂和具有跳跃性。结论的话要记住两个知识点,一:编写汇编函数的时候要对相应的寄存器进行保护。保护代码需要记住,每次写函数的时候都要用到。二:con原创 2016-06-09 14:22:56 · 466 阅读 · 0 评论 -
第十六天:C语言进阶之位运算及内嵌汇编
位运算在驱动开发中是经常遇到的,尤其是置0和置1。既要指定的位数发生变化,又不能改变其它位的值。还要高效率的编写代码。这时候技巧就很重要了。在位运算中有几个符号: | 按位或 & 按位与 ^ 异或 ~按位非 1 #include 2 3 int main() 4 { 5 int a = 0x1101; 6 int b = 0x1011;原创 2016-06-09 14:22:51 · 1097 阅读 · 0 评论 -
第四十二天:Tiny4412模块驱动开发
因为前面写裸板程序的时候,已经详细的叙述过LED灯的控制,按键的控制,以及watchdog的配置,这里就不赘述了,主要是说明模块如何控制底层硬件的。 第一个程序是模块程序控制LED灯全亮。 因为友善之臂将LED灯的驱动默认加载到内核中,编写模块驱动程序前就要先把原先的LED灯驱动裁剪掉。 首先进入linux源码目录。执行 make menuconfig 进入Devic原创 2016-06-09 14:24:28 · 1900 阅读 · 0 评论