摘要: 什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和Linux的本质不同,因此二者库的二进制是不兼容的。Linux操作系统支持的库函数分为静态库和动态库,动态库又称共享库。Linux系统有几个重要的目录存放相应的库函数,如/lib,/usr/lib;头 阅读全文
posted @ 2016-05-18 11:24 小禾先生 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 编译的过程 编译的概念:编译程序读取源程序(字符流),对之进行词法与语法的分析,将高级语言指令转换成功能等效的汇编代码,再由汇编程序转换成机器语言,并且按照操作系统对可执行文件格式的要求链接成可执行程序。 编译的完整过程:C源程序 > 预编译处理(.c) > 编译、优化程序(.s、.asm) > 汇 阅读全文
posted @ 2016-05-18 10:23 小禾先生 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 在学习gcc静态库动态库编译的时候选用静态库编译时出错显示:/usr/lib/ld:cannot find -lc 百度:/usr/lib/ld:cannot find -lc多处给的解决方案为: 然而并不能解决问题,最终定位发现是静态编译的问题。而且不止会出现这种情况: /usr/lib/ld:c 阅读全文
posted @ 2016-05-17 11:29 小禾先生 阅读(15583) 评论(0) 推荐(2) 编辑
摘要: 为了说清楚要修改的地方,下面会比较啰嗦 Linux系统内核的源代码是开放的,因此我们可以从官网上下载Linux内核。 下载地址:https://www.kernel.org 解压之后进入内核会看到一下一下目录: 其中每个目录的表示如下: 内核要修改的地方其实很少,只需要改一下arch/arm/目录下 阅读全文
posted @ 2016-05-14 16:56 小禾先生 阅读(1108) 评论(0) 推荐(0) 编辑
摘要: 首先需要知道的是,设备跟驱动是分开的。设备通过struct device来定义,也可以自己将结构体封装到自己定义的device结构体中: 例如:struct platform_device: platform_device通过向内核注册struct device dev这个结构体来告诉内核加载这个设 阅读全文
posted @ 2016-05-10 17:33 小禾先生 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 首先要明白字符设备驱动注册的基本流程 当我们调用insomd命令加载驱动后,驱动程序从module_init函数开始执行:硬件初始化 -> 申请主次设备号 -> 定义fops(file_operations)结构体 -> 申请cdev结构体并把fops结构体嵌入cdev结构体中与之绑定 -> cde 阅读全文
posted @ 2016-05-10 13:29 小禾先生 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 一、在Linux2.6内核中一个字符设备用cdev结构来描述,其定义如下: 可以使用如下宏调用来获得主次设备号:MAJOR(dev_t dev) MINOR(dev_t dev) MKDEV(int major,int minor) //通过主次设备号来生成dev_t 以上宏调用在内核源码中如此定义 阅读全文
posted @ 2016-05-08 12:24 小禾先生 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 根文件树制作好了之后用initramfs链接进内核里,编译好内核烧录,出现了一个很奇怪的问题: 这是怎么回事呢?内核找不到根文件系统,我们用initramfs的方式制作的文件系统,内核首先要找到一个init的文件,这时候我发现文件目录树里并没有init的文件。 [xiaohexiansheng@ce 阅读全文
posted @ 2016-05-06 15:08 小禾先生 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 注意:1、只有在bootloader阶段才能使用j-link下载调试,一旦Linux运行起来后,j-link就不能再使用了。2、如果开发板上没有出厂时的wince系统,就可以跳过前面的擦除出厂系统自带bootloader的过程,直接使用j-link下载bootstrap程序并烧录u-boot。 3、 阅读全文
posted @ 2016-05-06 14:57 小禾先生 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 一、EBUSY UNIX中的EBUSY:这是一种标准的错误值,表示“设备或资源忙”错误。具体是什么设备或资源忙,要看你是使用什么系统调用或接口时得到这个错误,具体信息可以看man errno以及你使用的接口。 二、__raw_readl宏 前面有_或者__的函数,具有这种名称的函数通常是接口的底层组 阅读全文
posted @ 2016-05-05 20:07 小禾先生 阅读(135) 评论(0) 推荐(0) 编辑