![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux嵌入式开发
文章平均质量分 68
DyLan985
想在IT方面做点事,希望志同道合的朋友多多交流和指点
展开
-
构造内核源码树
编写驱动程序时, 需要内核源码树的支持。内核源码树时从内核源代码编译得到的。下面开始构造内核源代码的步骤。 以Ubuntu为例子 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核的版本要和驱动程序运行的目标平台的内核版本一致) apt-cache search linux-source //搜索内核版本转载 2011-11-30 09:31:24 · 1100 阅读 · 0 评论 -
Linux的自旋锁struct spinlock_t的使用
在Linux中提供了一些机制用来避免竞争条件,最简单的一个种就是自旋锁,例如:当一个临界区的数据在多个函数之间被调用时,为了保护数据不被破坏,可以采用spinlock来保护临界区的数据,当然还有一个就是信号量也是可以实现临界区数据的保护的。以后在介绍信号量吧。这里还是先说说splinlock吧。 1:定义和初始化spinlock 在linux中定义spinlock的方法很简转载 2013-05-12 13:39:08 · 964 阅读 · 0 评论 -
网络驱动移植之sk_buff结构体及其相关操作函数(下)
2、结构体相关操作函数 (1)、dev_alloc_skb 实际上,函数dev_alloc_skb最终是调用__alloc_skb函数来分配数据缓冲区和sk_buff结构体的,如下图: 从dev_alloc_skb到__alloc_skb所涉及的源代码如下: [cpp] view plaincopyprint? /* linux-2.6转载 2013-09-11 18:54:53 · 1657 阅读 · 0 评论 -
网络驱动移植之sk_buff结构体及其相关操作函数(上)
开发平台:Ubuntu11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 内核源码:linux-2.6.38.8.tar.bz2 struct sk_buff是Linux操作系统网络相关代码中最重要的结构体之一,用于管理已接收或正要传输的网络数据包。此结构体定义在include/linux/skb转载 2013-09-11 18:09:53 · 1016 阅读 · 0 评论 -
通过proc文件系统输出必要的Linux内核信息(上)
开发平台:Ubuntu 11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 内核源码:linux-2.6.38.8.tar.bz2 proc是基于内存的文件系统,用来实现外界与Linux内核的信息交互(通过/proc目录下的各种文件)。 1、proc文件系统的初始化 proc文转载 2014-02-14 13:31:45 · 1510 阅读 · 0 评论 -
通过proc文件系统输出必要的Linux内核信息(中)
2、使用旧式proc接口的例子 本示例比较简单,先通过kmalloc函数分配一段TANGLINUX_LEN大小的内存,然后通过tanglinux_read和tanglinux_write函数来实现对这段内存的读写操作。 (1)、例子源代码 [cpp] view plaincopyprint? #include #include #inc转载 2014-02-15 10:11:05 · 1145 阅读 · 0 评论 -
通过proc文件系统输出必要的Linux内核信息(下)
3、使用seq_file接口的例子 本例通过/proc/seq_file_test文件输出Linux内核的十个随机数,并与printk打印的信息进行比较。 (1)、例子源代码 [cpp] view plaincopyprint? #include #include #include #include #include转载 2014-02-15 10:12:09 · 954 阅读 · 0 评论 -
套接字中的数据转换(大端模式/小端模式)
通常使用的有两种数据类型:短型(两个字节)和长型(四个字节)。 下面介绍的这些转换函数对于这两类的无符号整型变量都可以正确的转换。 如果你想将一个短型数据从主机字节顺序转换到网络字节顺序的话,有这样一个函数htnos: 它是以"h”开头的,代表“主机”; 紧跟着它的是"to",代表“转换到”; 然后是"n",代表“网络”; 最后是"s转载 2014-02-17 08:29:23 · 1482 阅读 · 0 评论 -
解决隐式声明与内建函数不兼容问题
一 运行一段带有memset,memcpy等函数操作的代码,编译器上报如下错误: netlink-exam-user-send.c: 在函数‘main’中: netlink-exam-user-send.c:39: 警告: 隐式声明与内建函数‘memset’不兼容 netlink-exam-user-send.c:54: 警告: 隐式声明与内建函数‘memcpy’不兼容 netlink-e原创 2014-02-19 08:23:04 · 20158 阅读 · 0 评论 -
NAPI机制分析
NAPI 的核心在于:在一个繁忙网络,每次有网络数据包到达时,不需要都引发中断,因为高频率的中断可能会影响系统的整体效率,假象一个场景,我们此时使用标准的 100M 网卡,可能实际达到的接收速率为 80MBits/s,而此时数据包平均长度为 1500Bytes,则每秒产生的中断数目为: 80M bits/s / (8 Bits/Byte * 1500 Byte) = 6667 个中断 /转载 2012-10-07 10:38:58 · 803 阅读 · 0 评论 -
C语言嵌入式系统编程之软件架构篇
模块划分 模块划分的“划”是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念: (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;转载 2012-03-14 11:01:19 · 1262 阅读 · 0 评论 -
理解嵌入式开发中的一些硬件相关的概念
做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。 电平(Level) 在数字电路中,分为高电平和低电平,分别用1和0表示。一个数字电路的管脚,总是存在一个电平的,要么高要么低,或者说要么1要到0(其实,还有另一种状态,后面会提到)。 总线(Bus)转载 2012-03-14 10:57:49 · 586 阅读 · 0 评论 -
编译Linux内核数
本文是参考了网上多篇帖子而写的算不上什么原创。唯一值得欣慰的只不过在本机上实现罢了。因为毕竟失败了几次。也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的。望有识之士不要笑话。最后,希望本文能给刚学驱动而还没开头的人提供一些帮助。 刚看 O'REILLY 写的《LINUX 设备驱动程序》时。作者一再强调在编写驱动程序时必须 建立内核树。所谓内核树,我的理解和网上资料说的转载 2011-11-30 09:40:32 · 1210 阅读 · 1 评论 -
Linux内核版本号的意义
在linux下有一个目录,即/usr/src/kernels/目录,下面记载着一个linux系统的内核文件,例如:2.6.18-164.el5-x86_64、2.6.18-8.el5-x86_64和2.6.18-194.el5-x86_64等,这些文件编号意味着什么呢?例如2.6.18代表着什么?el5代表着什么?x86_64又代表着什么? linux内核版本的分类 Linux内核版本有两种:转载 2011-12-01 09:57:08 · 1797 阅读 · 1 评论 -
Linux下./configure错误详解
sudo apt-get install 软件包 这个是更新你指定的软件包 sudo apt-get update 获取更新列表 sudo apt-get dist-upgrade 开始更新 ./configure的问题 错误: C compiler cannot create executables 解决:sudo apt-get gcc libc6-dev 错误:checking转载 2011-12-01 10:16:04 · 1957 阅读 · 0 评论 -
Ubuntu Linux系统下apt-get命令详解
整理了Ubuntu Linux操作系统下apt-get命令的详细说明,分享给大家。 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明、大小、版本等 sudo apt-get install package 安装包 sudo apt-ge原创 2011-12-01 10:17:23 · 672 阅读 · 0 评论 -
关于apt-cache 的一些介绍
apt-cache是一个apt软件包管理工具,它可查询apt的二进制软件包缓存文件。通过它我们可查询软件包的状态信息。 apt-cache show package_name 显示软件的信息,包括版本号,安装状态和包依赖关系等。 apt-cache search package_name 搜索软件包,可用正则表达式。 apt-cache showp转载 2011-12-01 10:02:12 · 6926 阅读 · 0 评论 -
linux下各个目录里面都装了什么
搞电脑的人总想知道自己的系统里到底有些什么东西,于是我就在Linux的根目录下运行ls -l(列目录命令),哇,一大串,这许多目录都放些什么呢?我硬着头皮往里钻,功夫不负有心人,终于将这迷宫的秘密揭开了。在此公布天下: /bin bin是binary的缩写。这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令。例如cp、ls、cat,等等。 /boot 这里原创 2011-12-04 08:12:06 · 3573 阅读 · 0 评论 -
Linux液晶屏驱动开发
(转自 http://imhongyu.com/development/development_linux/developmentdoc_linux/linuxdocID52.asp) 随着高性能嵌入式处理器的普及和硬件成本的不断降低,尤其是arm 系列处理器的推出,嵌入式系统的功能越来越强。单色LCD也因为色彩单调,存储信息小,处理速度慢而不能符合人们的需求。转载 2011-12-10 07:57:27 · 974 阅读 · 0 评论 -
抢占式内核与非抢占式内核的区别
内核抢占(可抢占式内核): 即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。 非抢占式内核: 高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核。 抢占式内核的意义: 首先,这是将原创 2011-12-13 21:26:33 · 14103 阅读 · 0 评论 -
linux下DNS详解及应用之三
DNS:domain name system 递归查询:进行一次查询就能得到最终结果 迭代查询:需要进行多次查询,才能得到最终结果 互联网上的应用方式一般是:本地递归,互联网部分迭代。 所有DNS都不知道其他DNS在哪里,但都知道根在哪里,本地主机向本地DNS递归,本地DNS出去迭代查询后向本地返回最终结果。 DNS常见的记录类型: A记录: 由主机名解析IP地址 PTR记原创 2011-12-13 12:18:44 · 3566 阅读 · 0 评论 -
Linux内核态与用户态进程通信方法-用户上下文
运行在用户上下文环境中的代码是可以阻塞的,这样,便可以使用消息队列和 UNIX 域套接字来实现内核态与用户态的通信。但这些方法的数据传输效率较低,Linux 内核提供 copy_from_user()/copy_to_user() 函数来实现内核态与用户态数据的拷贝,但这两个函数会引发阻塞,所以不能用在硬、软中断中。一般将这两个特殊拷贝函数用在类似于系统调用一类的函数中,此类函数在使用中往往"穿梭原创 2014-02-19 19:53:09 · 6364 阅读 · 2 评论