嵌入式Linux
文章平均质量分 64
G1036583997
这个作者很懒,什么都没留下…
展开
-
交叉编译器arm-linux-gcc-4.4.3安装
具体步骤:1、解压 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C/( 直接解压后就可以,-C/会让解压的文件自动放在根目录下指定路径,不用管)2、设置环境变量:首先 vi ~/.bashrc 然后在最后加上 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin转载 2013-09-27 09:04:03 · 1486 阅读 · 0 评论 -
自动创建设备文件 (国嵌笔记)
自动创建设备文件1.内核2.4中有设备文件系统使用devfs_register(dir,name,flags,major,minor,mode,ops,info)dir:目录名,为空表示在/dev/下创建name:文件名;flags:创建标志;major,minor:主次设备号;mode:创建模式,字符和块等通过他来标识;ops:操作函数集;info:通常为空2.内核2.6开始原创 2015-03-10 20:46:03 · 623 阅读 · 0 评论 -
mmap设备操作-内存映射,把文件映射到内存中(国嵌笔记)
1.mmap功能:内存映射,负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。返回:起始地址2.参数addr:指定映射的起始地址,通常设为NULL,由系统指定length:映射到内存的文件长度。prot:映射区的保护方式:PROT_EXEC:映射区可被执行PROT_READ:映射区原创 2015-03-10 20:47:53 · 1755 阅读 · 0 评论 -
中断处理(国嵌笔记)
硬件相关 1.向内核注册中断函数 2.实现中断处理函数1.注册requst_irqFLAGS2.6->IRQF_DISABLED (2.4->SA_INTERRUPT)IRQF_SHARED(SA_SHIRQ)快速/慢速中断快速中断保证中断处理的原子性(不被打断),而慢速中断则不保证。共享中断:将不同的设备挂到同一个中原创 2015-03-11 09:21:10 · 662 阅读 · 0 评论 -
应用开发第一天编程基础(国嵌笔记)
1.gcc1.预处理、编译、汇编、连接2.gcc常用的参数 o,I,L,l,D,w,Wall,O,O2,static,c2.gdb1.gdb 文件名 或 gdb 然后使用file命令2.l/list显示程序 3.断点b/break 指定函数、行号、文件名:行号、行号if条件4.info break 查看全部断点5.delete 断点编号 。删除断点6.r/run原创 2015-03-10 20:11:43 · 728 阅读 · 0 评论 -
应用开发第三天进程控制(国嵌笔记)
1.进程控制理论基础1.进程是一个具有一定独立功能的程序的一次运行活动进程和程序的区别:程序在运行时就是进程了。程序是静态的(在磁盘上存储着), 特点:动态性,并发性,独立性,异步性状态转换图:三态就绪,阻塞,执行进程ID:PID,PPID,UID(启动进程的用户ID)进程互斥:当有若干进程都需要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该原创 2015-03-10 20:17:38 · 559 阅读 · 0 评论 -
应用开发第二天文件编程(国嵌笔记)
1.文件编程可以使用两种方法:Linux系统调用,C语言库函数系统调用方式1.create(filename,mode)创建的文件名(可包含路径,默认为当前目录)和创建模式(读写执行,也可以使用数字进行表示)2.每一个打开的文件都有一个---->文件描述符.文件描述符的本质是一个非负整数。打开文件时,该整数由系统来分配。3.打开。open(pathname,flags).如果使原创 2015-03-10 20:13:42 · 593 阅读 · 0 评论 -
应用程序开发第五天进程通信(国嵌笔记)
进程间通信1.消息队列unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(报文队列)则克服了这些缺点消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。读之后此数据就不存在了POSIX消息队列和系统V消息队列,系统V原创 2015-03-10 20:19:11 · 625 阅读 · 0 评论 -
应用程序开发第四天进程间通信(国嵌笔记)
1.进程间通信概述为什么进程间需要通信?1.数据传输(一个进程需要将它的数据发送给另一个进程)2.资源共享(多个进程间共享同样的资源)3.通知事件(一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件)4.进程控制(有些进程希望完全控制另一个进程的执行,如Debug进程,此时控制进程希望能够拦截另一个进程的所有操作,并能够及时通知它的状态改变)现在Linux使用的原创 2015-03-10 20:19:41 · 658 阅读 · 0 评论 -
应用程序开发第六天多线程(国嵌)
多线程1.线程基础有了进程为什么还要引入线程多线程属于同一个进程遵循POSIX。使用pthread.h,连接时需要使用libpthread.a库2.线程1.创建线程#includeint pthread_create(tidp,attr,start_rtn,arg);tidp:线程id(用于返回的)。attr:线程属性(通常为空)。start_rtn:线程要原创 2015-03-10 20:20:28 · 770 阅读 · 0 评论 -
应用程序开发第七天网络编程(国嵌笔记)
1.网络概述1.提供了强大完善的网络功能1.完善的内置网络,和内核紧密的结合在一起2.Linux提供大量免费internet软件3.通过Linux命令完成内部或文件的传输4.远程访问5.安全可靠2.LINUX网络模型见图 二层协议:数据链路层三层协议:网络层Linux网络层主要包含协议:第一部分网络层协议:IP,ICMP,ARP原创 2015-03-10 20:24:13 · 963 阅读 · 0 评论 -
进程管理(Linux内核设计与实现 整理)
一、进程线程相关概念1.进程就是处于执行期的程序。但进程不仅仅局限于程序代码。还要包括其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态等进程是处于执行期的程序以及相关资源的总称。2.线程是进程中活动的对象。每个线程都拥有独立的程序计数器、进程栈和一组进程寄存器。(查看进程和线程共享的部分???线程->fork->共享代码段,其他部分复制一份。类似的东西。要查询确认)原创 2015-03-10 20:29:44 · 651 阅读 · 0 评论 -
linux kernel Oops调试信息分析 异常调试
1.看异常类型(错误原因提示)在内核中访问地址必须是c开头以上的,其他的肯定是非法的内核访问地址范围从0xc0000000开始 2.调用栈backtrace(对照反汇编代码)反汇编查找相应的出错点3. 寄存器 PC和LR 根据位置和反汇编代码找到相应的出错位置,进行修改即可原创 2015-03-10 20:33:12 · 1322 阅读 · 0 评论 -
内核等待队列(国嵌笔记)
内核等待队列可以使用等待队列来实现继承的阻塞,等待队列可以看作保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出操作等待队列1.定义等待队列wait_queue_head_t my_queue2初始化等待队列init_waitqueue_head(&my_queue)3.定义并初始化等待队列DECLARE_WAIT_QUEUE_HE原创 2015-03-10 20:46:00 · 540 阅读 · 0 评论 -
内核驱动开发第五天linux系统调用
1.系统调用一般情况下,用户进程是不能访问内核的。它既不能访问内核中的数据,也不能调用内核中的函数。但系统调用是一个例外。还有一个是中断Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。2.区别系统调用和普通的函数调用非常相似,区别仅仅在于,系统调用由操作系统内核实现,运行于内核态;原创 2015-03-10 20:37:05 · 608 阅读 · 0 评论 -
ARM裸机开发笔记5(ARM指令集)
跳转指令:最简单的这届修改PC的值以下指令中可以完成从当前指令向前或向后的32M的地址空间的跳转B{条件} 目标地址 ;花括号表示条件,可以省略 最简单的跳转指令,一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行 CMP R!,#0 BEQ Label原创 2013-09-24 16:49:44 · 995 阅读 · 0 评论 -
ARM裸机开发笔记2(ARM的存储与工作模式)
1.两种工作状态:ARM状态 32位指令 Thumb 16位指令可以通过一些机制进行两种状态的转换 2.ARM的寻址空间对多可以达到4G,是以字为单位进行对齐(字对齐)。一款ARM芯片先要知道其存储方式:是大端还是小端(大小端的编译等存在差别) ARM体系结构分为两种方法存储数据,成为大端方式和小端方式大端方式:字数据的高字节存储在低地址中,而数据的字节数据的低字节原创 2013-09-24 10:47:30 · 1032 阅读 · 0 评论 -
ARM裸机开发笔记1(指令简介)
1.非常简单的ARM程序:arm.s文件内容 AREA Example,CODE,READONLY ;声明代码段 AREA:定义代码段 Example是代码段名称CODE:代码段关键字READONLY:只读关键字 ENTRY原创 2013-09-24 09:09:04 · 901 阅读 · 0 评论 -
ARM裸机开发笔记3(ARM寄存器)
37个32位寄存器31个通用6个状态寄存器ARM寄存器ARM共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.这些寄存器不能被同时访问,但在任何时候,通用寄存器R0~R14,程序计数器PC,一个或两个状态寄存器都是可访问的.通用寄存器通用寄存器包括R0~R15,可以分为3类:(1)未分组寄存器R0~R7(2)分组寄存器R8~R14(3)程序计原创 2013-09-24 11:23:37 · 981 阅读 · 0 评论 -
ARM裸机开发笔记6(ARM伪指令)
伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。符号定义、数据定义、汇编控制、宏和其他另外的伪指令转:http://blog.chinaunix.net/uid-13701930-id-336459.html4.1 ARM汇编器所支持的伪指令在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符转载 2013-09-24 17:55:26 · 922 阅读 · 0 评论 -
ARM裸机程序开发7(汇编与c混合编程)
在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的。在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较好,便于人的理解,而且有大量的支持库。尽管如此,很多地方还是要用到汇编语言,例如开机时硬件系统的初始化,包括CPU状态的设定,中断的使能,主频的设定,以及RAM的控制参数及初始化,一些中断处理方面也可转载 2013-09-24 18:06:55 · 1265 阅读 · 0 评论 -
ARM裸机程序开发10(LED控制程序)
mini2440对应的IO口是led1-led4 对应的是GPB5-GPB8控制思想:1.设置为输出状态2.向相应的引脚输出低电平点亮LED原创 2013-09-27 09:12:09 · 1174 阅读 · 0 评论 -
AXD Debugger
以NandFlash测试程序为例来说明AXD工具使用方法.在CodeWarrior中执行Debug,ADS编译器会自动调用AXD工具.(一)使用H-JTAG的AXD调试(1)使用AXD工具前需要指定H-JTAG来调试开发板. 开发板不上电,在CodeWarrior中执行Debug,ADS编译器自动调用AXD工具.在AXD界面内执行菜单Options/Configure Tar转载 2014-04-11 20:13:23 · 2330 阅读 · 0 评论 -
IOCTL 高级字符设备驱动程序(国嵌笔记)
高级字符设备驱动程序1.ioctl设备控制 大部分驱动程序除了需要具备读写设备的能力外,还需具备对硬件控制的能力。例如:要求设备报告错误信息,改变波特率等,通常通过ioctl来实现2.用户使用方法int ioctl(int fd,unsigned long cmd,···)函数中的省略部分代表这是一个可选参数,存在与否依赖于控制命令(第二个参数)是否涉及到与设备的数据交互。原创 2015-03-10 20:43:01 · 953 阅读 · 0 评论 -
Poll设备操作(国嵌笔记)
Poll设备操作用户空间中的select对应内核中的Poll1.select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。int select(int maxfd,fd_set *readfds,fd_set *writefds,fe_set *exceptfds,const struct timeval *timeout)maxfd:文件描述符的原创 2015-03-10 20:45:14 · 711 阅读 · 0 评论 -
字符驱动程序 (国嵌笔记)
linux驱动程序概述1.学习方法驱动程序设计模式40%+内核相关知识30%+硬件相关知识30%2.早期设计模式1.每一个应用程序都要写一遍驱动程序。复用性差2.将驱动程序提取出来,多个应用程序调用一个驱动程序。前期设计问题导致的驱动程序改变,全部应用程序都需要变动3.分类字符设备驱动、网络设备驱动、块设备驱动字符设备:以字节为最小单位来访问的设备块设备:访问数原创 2015-03-10 20:42:35 · 666 阅读 · 0 评论 -
内核驱动开发第四天linux内核链表
基本概念1.链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。2.链表的开销主要是访问的顺序性和组织链的空间损失通常链表数据结构至少包含两个域:数据域和指针域,数据域用于存储数据,指针原创 2015-03-10 20:39:30 · 996 阅读 · 0 评论 -
网卡驱动程序(国嵌笔记)
驱动程序的方法:1.了解在LINUX内核中怎么描述这个设备或者驱动。用什么结构,里面有什么成员、指针(函数,主要是什么功能,什么时间调用)2.怎么注册驱动程序网络驱动程序1.使用struct net_device来描述使用alloc_netdev或alloc_etherdev来动态分配关键成员:char name[IFNAMSIZ] 设备名e原创 2015-03-11 09:24:28 · 747 阅读 · 0 评论 -
平台驱动程序platform(国嵌笔记)
在2.6的内核中很多驱动程序都采用platform形式的驱动程序platform是一种虚拟总线。platform机制的本身实现并不复杂,由两部分组成:platform_device和platform_driverplatform_bus内核已经实现好了,只需要基于这条总线进行操作就可以了1.工作流程1.定义platform_device2.注册platform_de原创 2015-03-11 09:19:48 · 1075 阅读 · 0 评论 -
mini2440移植sqlite
转载自:http://www.arm9home.net/read.php?tid=127411.解压数据库源文件并进入解压后的目录,如下:tar -zxvf sqlite-3.6.22.tar.gz cd sqlite-3.6.222.创建一个目录build并进入该目录,用于在这个目录中进行交叉编译,如下:mkdir buildcd build3转载 2015-03-23 17:36:35 · 631 阅读 · 0 评论 -
嵌入式Linux启动过程分析1-readme
分析整个环境的启动过程的思路:1.首先确定生成可用于烧写的二进制文件的具体步骤2.倒推启动过程例如:linux内核的启动过程1.配置make menuconfig 之后生成.config文件,生成相关的配置项。配置项即为编译程序功能的宏开关,用来控制功能是否需要编译进内核,模块或者>是不需要。2.根据Makefile生成uImage3.uImage在Makefile原创 2015-04-11 08:48:23 · 876 阅读 · 0 评论 -
嵌入式Linux启动过程分析3-bootloader
选用u-boot作为系统的bootloaderbootloader定义:是一段程序,能在系统上电时开始运行,初始化硬件设备,准备好软件环境,最后调用操作系统内核使用bootloader的目的是:启动内核(终极目的是启动内核)在这个过程中需要进行许多的工作包括:1.读flash2.初始化外设3.启动内核使用u-boot作为引导启动代码,工作过程可以分为两个阶段原创 2015-04-11 08:52:11 · 745 阅读 · 0 评论 -
嵌入式Linux启动过程分析4-u-boot-1step-start.S
/* * armboot - Startup Code for ARM920 CPU-core * * Copyright (c) 2001 Marius Gröger * Copyright (c) 2002 Alex Züpke * Copyright (c) 2002 Gary Jennejohn * * See file CREDITS for list of原创 2015-04-11 08:52:34 · 1298 阅读 · 0 评论 -
嵌入式Linux启动过程分析5-u-boot-1step-word
文字描述u-boot的第一阶段1.首先将CPU设置为SVC模式2.关闭看门狗(或者称为设置看门狗的工作状态)3.设置FCLK、HCLK、PCLK的比例。设置分频器4.关闭MMU和CACHE5.设置BANK的寄存器,为搬移代码准备RAM空间6.判断代码是否在RAM中,若是则不需要进行搬移7.若需要搬移则进行代码搬移(具体的搬移开始结束位置是通过计算出来的)。不需要搬移原创 2015-04-11 08:53:22 · 747 阅读 · 0 评论 -
嵌入式Linux启动过程分析6-u-boot-2step-word description
第二阶段是从lib_arm/board.c中的start_armboot开始的第二阶段也可以分为两个部分,init_sequence中的初始化部分,start_armboot函数后续的初始化部分,之后是main_loop等待用户处理或启动内核1.初始化本阶段用到的硬件设备,在board.c中的init_sequence数组中预先定义的初始化函数.这中间有使用/include/con原创 2015-04-11 08:55:38 · 637 阅读 · 0 评论 -
嵌入式Linux启动过程分析7-linux
要分析内核源代码首先得知道怎样编译生成最终的二进制代码根据操作过程得到相应的第一个执行的文件目的:1.第一个执行的文件是什么?2.连接脚本怎么排布make uImage ---->arch/arm/Makefile--->uImage:vmlinux:vmlinux才是真正的内核 --------->底层的Makefile被顶层的Makefile所包含原创 2015-04-11 08:57:56 · 594 阅读 · 0 评论 -
嵌入式Linux启动过程分析8-linux-kernel-setup
linux的启动过程可以分为两个部分1.架构/开发板相关的引导过程2.后续的通用启动过程最终目的:运行应用程序(在根文件系统中)------->挂载根文件系统才能找到应用程序第一阶段:引导过程通常使用汇编语言编写第一个执行的文件是/arch/arm/kernel/head.S1.开始确定内核是否支持该构架__lookup_processor_type2.确定内核原创 2015-04-11 08:58:42 · 779 阅读 · 0 评论 -
嵌入式Linux启动过程分析9-root
1.移植busybox2.拷贝形成相应的库文件3.修改配置文件移植busybox1.配置make menuconfig生成配置2.修改Makefile3.make 指定相应的CONFIG_PREFIX否则会覆盖操作系统原有的文件,导致系统崩溃形成库文件将gcc-3.4.5-glibc-2.3.6解压后,将*.so*文件拷贝到 /lib目录下修原创 2015-04-11 09:00:07 · 954 阅读 · 0 评论 -
确定OK6410中触摸屏设备名称
一般在/dev/input/eventX下的相关设备中有一个就是触摸屏确定方法,cat /dev/input/event2 然后触发触摸屏,若有反应则为触摸屏原创 2016-01-07 19:51:11 · 731 阅读 · 0 评论 -
OK6410 Qt Segment fault
http://blog.sina.com.cn/s/blog_8600e72b0100ya9z.html自己最后尝试了一下,可能是由于中文造成的./xx -qws -fn SIMHEI这样执行后就没问题了转载 2016-01-07 19:29:35 · 771 阅读 · 0 评论