自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

snailr

天道酬勤

  • 博客(18)
  • 收藏
  • 关注

原创 初探66AK2x

66AK2x是TI公司在2013年推出的一款C66x芯片,作为6678的升级版本。提升处理运算速度的同时,巧妙地引入ARM核。让ARM搭载Linux系统来管理外设,比如串口,网络,DDR.SRIO等,让DSP专注于信号处理,大大提高了DSP核的应用效率。这种多核异构的模式,TI的达芬奇系列芯片上已经获得应用于视频图像处理中。C66x系列dsp具有最强的浮点运算能力,Linux得力于开源社区的支持,

2016-06-09 19:32:16 2666 2

原创 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 1732 1

原创 第四十二天:Tiny4412模块驱动开发

因为前面写裸板程序的时候,已经详细的叙述过LED灯的控制,按键的控制,以及watchdog的配置,这里就不赘述了,主要是说明模块如何控制底层硬件的。  第一个程序是模块程序控制LED灯全亮。   因为友善之臂将LED灯的驱动默认加载到内核中,编写模块驱动程序前就要先把原先的LED灯驱动裁剪掉。  首先进入linux源码目录。执行 make menuconfig    进入Devic

2016-06-09 14:24:28 1834

原创 第四十一天:Linux内核栈

linux3.5内核中为所有进程(包括内核进程和用户进程)分配8k或4k的内核栈(可以在内核编译的时候选择),在模块代码中分配的栈内存就是在内核栈中,写模块代码如果要在堆中分配内存,则要使用kmalloc或vmalloc来分配,这是后话。  内核栈的栈底存放这thread_info, 通过获取内核栈,以得到thread_info的信息,thread_info里面有一个指向task_struct

2016-06-09 14:24:23 4886

原创 第四十天:编译可加载模块

linux刚刚开始的时候仅仅支持intel 386 ,后来不断的被移植到越来越多的平台上,包括ARM ,POWERPC,所有的代码设备驱动代码都编译到内核中,这明显不现实,这时候就需要通过内核模块的形式来加载驱动。当然模块不一定是驱动,也可以是为驱动提供某种功能。  现在先编写一个简单的linux模块。 1 #include 2 #include 3 4 MODULE

2016-06-09 14:24:19 877

原创 第三十九天:linux内核裁剪

培训的第四阶段:通过编写驱动,从应用层,内核层,再到底层硬件之间的关系。明白内核驱动的意义。现在开始才是重头戏,前面的都是铺垫。       正式编写驱动前,要先了解linux内核代码的组成。linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进程间通信。linux源代码用来实现这些功能,linux源码包在source_code目录下的linux-3.5-2013102

2016-06-09 14:24:14 20243 1

原创 第三十八天:Tiny4412驱动开发之外部中断

在三天前学习按键驱动的时候,按键通过轮循的方式,一直在等待被按下,这时候系统不能够完成其它的操作,这明显是不科学的,可以使用外部中断解决这个问题。  在Tiny4412中中断分为三种 分别是软件通用中断(SGI),私有设备中断(PPI),共享设备中断(SPI)。  一共有160个中断号,中断表在Tiny4412手册的745页。前篇写的看门狗中断属于PPI,今天的实验所使用的是SPI。也可以

2016-06-09 14:24:10 2535 1

原创 第三十七天:Tiny4412驱动开发之看门狗中断

1.    看门狗原理  Watchdog原理上就是一个定时器。定时器timer对时钟进行计数,当定时器溢出时,产生复位信号,使得整个系统复位。在程序或嵌入式系统中,需要 定期的对看门狗timer进行复位重新计数,定时器不会溢出复位系统,从而保证系统的正常运行。当某种原因(例如干扰)引起程序跑飞或者进入死循环时,程 序不能定期的复位看门狗timer, 计数溢出产生复位信号,导致系统复位。 

2016-06-09 14:24:05 2481

原创 第三十七天:Tiny4412驱动开发之二级跳转

ARM五级流水线:取值,译码,执行,访存,回写。未定义指令异常和SWI软中断发生在译码阶段,其它异常发生在执行阶段。    现在假设有五条指令,三指令正在执行的时候,四指令在译码过程中发生未定义指令异常,跳转到异常处理程序回来后,因为 PC指向五指令,所以继续执行五指令的内容。  但是,如果程序在三指令执行期间发生错误,处理回来后到达五指令,把四指令跳过了。解决方式是在处理的把PC的值

2016-06-09 14:24:02 489

原创 第三十六天:Tiny4412驱动开发之模式跳转

ARM支持七种模式,如下图所示:    1、 User Mode:用户模式。     2、FIQ Mode:快速中断模式。        3、 IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。        4、 Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。     5、 Abort Mode:所有同内存保护相关

2016-06-09 14:23:58 584

原创 第三十五天:Tiny4412驱动开发之配置MMU

MMU表示内存管理单元,负责虚拟内存映射到物理内存。   虚拟地址映射到物理地址的关键是构建映射表。MMU就是利用映射表格将虚拟地址转换成物理地址。虚拟地址在32系统中为4G,地址占4字节,如果映射表格中虚拟地址和物理地址是一一对应的关系,一条记录就占8字节,那么映射表就要32G.这明显是不合理的。   于是通过二级映射解决这个问题。地址共32位,把前12位作为基地址,后20位作为偏移量,

2016-06-09 14:23:55 956

原创 第三十四天:Tiny4412驱动开发之按键驱动与蜂鸣器驱动

编写按键驱动的过程和编写LED灯的驱动类似。区别在于按键是在底板上的。要从底板的电路图开始看。   使用key为关键字查找电路图:   可以得知的信息:按键松开时候XEINT26为高电平。按下时候为低电平。所以要判断按键是否被按下,就要检测XEINT26的状态。 使用XEINT26为关键字,在核心板上查看其定义。找到下图:     XEINT26在核心板上链接到GPX3_2

2016-06-09 14:23:51 2650

原创 第三十三天: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 2287

原创 第二十七、二十八天:网络数据封装及各层数据的发送

这几天的课程给了我们足够多的时间编写代码,让我们更熟练使用套接字编程。课程的代码也更多了。几个要实现的代码:编写抓包程序,封装网络数据包,网络层数据发送,编写简易的web服务器,arp应用层数据分析,实现ftp客户端。使用http实现简单的文件下载器。    为了对网络五层有更加深入的了解,通过下面的程序对网卡的数据进行抓包分析。实现类似与wireshark的功能。  1 #incl

2016-06-09 14:23:32 508

原创 第二十五、二十六天:基于UDP的网路聊天程序

连续四天学习套接字的编程,可见套接字的重要性了。基于TCP和UDP分别写了两个程序。一是利用TCP实现一个服务器对多个客户端,客户端你发送信息,服务器就从事先准备好的五个字符串中随机回复一条。另一个是利用UDP实现两个人的对话,对话时可以是多个信息同时输入。   先是第一个程序。要实现一对多,就要使用线程编程,服务器端在不断监听中,如果有连接请求的话,就用通过accept函数接受并创建一个线程

2016-06-09 14:23:27 675

原创 第十七天:APCS和container_of宏

APCS 全称:ARM 过程调用标准 如果要写用来与编译后的 C 连接的汇编代码,则必须使用 APCS。  今天的课程最终的两个目标:使用符合APCS标准的汇编写输出hello world  以及编写container_of宏 。这两个的推导过程比较复杂和具有跳跃性。结论的话要记住两个知识点,一:编写汇编函数的时候要对相应的寄存器进行保护。保护代码需要记住,每次写函数的时候都要用到。二:con

2016-06-09 14:22:56 427

原创 第十六天:C语言进阶之位运算及内嵌汇编

位运算在驱动开发中是经常遇到的,尤其是置0和置1。既要指定的位数发生变化,又不能改变其它位的值。还要高效率的编写代码。这时候技巧就很重要了。在位运算中有几个符号: |  按位或 & 按位与  ^ 异或  ~按位非   1 #include 2 3 int main() 4 { 5 int a = 0x1101; 6 int b = 0x1011;

2016-06-09 14:22:51 1001

原创 第十五天: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 4214

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除