12_Linux高级驱动
世界从而改变
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
dm9000的移植
###dm9000的移植(注意中文括号)plat_dev平台代码修改: vim arch/arm/mach-s5pc100/mach-smdkv210.c 1. 修改网卡的mac地址:static struct dm9000_plat_data smdkv210_dm9000_platdata = { .flags = DM9000_PLATF_16BITONLY | DM900原创 2016-07-10 19:19:30 · 425 阅读 · 0 评论 -
输入子系统的基本编程方法
struct input_dev *simple_input;1.构建 simple_input = input_allocate_device(); simple_input->name = "simple my input";2. 初始化struct input_dev; __set_bit(EV_KEY, simple_input->evbit); __set_b原创 2016-07-04 13:11:31 · 399 阅读 · 0 评论 -
编译工程
#############################################################export CROSS=arm-goke-linux-gnueabi-#CROSS := arm-none-linux-gnueabi-CURDIR := $(shell /bin/pwd)ROOTDIR = ..#添加私有的头ADIDIR = ../../../ad原创 2016-12-16 20:54:02 · 360 阅读 · 0 评论 -
在驱动中创建文件(/sys 中查询)
device, driver 和bus的编程一、定义在/sys某个目录下创建一个文件: struct bus_attribute { struct attribute attr; ssize_t (*show)(struct bus_type *bus, char *buf); ssize_t (*store)(struct bus_t转载 2016-12-06 21:15:03 · 813 阅读 · 0 评论 -
国科的u-boot烧录
gk7101开发准备: 1). 挂在根文件系统的目录 a. 打开文件:/etc/default/tftpd-hpa $sudo vi /etc/exports b. 写入以下内容: /opt/rootfs *(subtree_check,rw,no_root_squash,async原创 2017-02-25 15:27:46 · 1352 阅读 · 1 评论 -
/proc、/dev、/sys
三个文件都是在内存上的,掉电丢失1 /proc 存放系统信息, cpu,mem, devices,interupt cat /proc/devices cat /proc/interrupt cat /proc/1/schedstat2 /dev 存放设备节点的(ls -l /dev/xxx 查看主次原创 2016-10-28 21:33:41 · 2994 阅读 · 0 评论 -
2.1 busybox根文件系统制作
1. 源码下载 2. 解压源码 3. 进入源码目录,修改Makefile 4. 配置源码 5. 编译 6. 安装 7. 进入安装目录下 8. 创建其他需要的目录 9. 添加动态库 10. 添加系统启动文件 11. 在_install/etc下添加文件fstab 12. 在_install/etc下创建init.d目录,并在init.d下创建rcS文件原创 2016-07-12 21:41:22 · 595 阅读 · 0 评论 -
2.2 Nand flash驱动移植--分区
注意: 如果要将所有镜像烧录到开发板的nandflash, 就必须移植nandflash驱动Nand flash驱动的移植 移植最后一层nandflash特定硬件驱动,驱动一般放在drivers/mtd/nand目录下 为nand特定硬件驱动提供平台资源,nandflash控制寄存器的基地值,还有一个分区表 作用: 1. 可以把u-boot、uImage、rootfs原创 2016-07-13 13:08:54 · 670 阅读 · 0 评论 -
2.4 zImage 启动过程
1 内核启动:init /main.c --> start_kernel( ) -->setup_arch( ) -->rest_init( );2 setup_kernel( ) 1 建立平台相关的代码: cpu 时钟 内存 2 初始化: 进程 线程原创 2016-10-27 20:16:37 · 357 阅读 · 0 评论 -
2.3 制作cramfs、jffs2的镜像文件并烧录
注意: u-boot.bin、uImage、cramfs、jffs2都必须拷贝到 /tftpboot 目录下1. 制作 cramfs镜像文件1. 由于系统提供制作cramfs文件系统的工具,可以直接使用。在rootfs目录下: $ mkfs.cramfs rootfs rootfs.cramfs $ sudo cp rootfs.cramfs /tftpboot2. 制作 jffs2原创 2016-07-13 15:55:29 · 914 阅读 · 0 评论 -
i2c总线1
说明: 1. i2c是一种接口和soc链接一起。(遵从i2c协议 ) 2. 不管什么协议的通信,都需要提供一条时钟线。如:i2c scl线一、 i2c协议和时序(从设备一直在等待master的选址)1. i2c是从设备的开发 2. 每个从设备都有一个设备地址(7bit or 10bit),有的会有内部地址(寄存器也是地址)3. 从设备硬件: cmos camera ts原创 2016-07-06 15:06:31 · 749 阅读 · 0 评论 -
uart应用层设置
#include <stdio.h>#include <time.h>#include <string.h>#include <sys/types.h>#include <errno.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h> #include <termios.h>#include <stdlib.h>转载 2016-11-01 20:22:22 · 314 阅读 · 0 评论 -
platform 平台总线
一、 在/sys某个目录下创建一个文件:struct bus_attribute { struct attribute attr; ssize_t (*show)(struct bus_type *bus, char *buf); ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);原创 2016-10-28 21:52:43 · 424 阅读 · 0 评论 -
内核的首次配置
@ make s5pv210_defconfig //拷贝标准板配置文件1. General setup ---> //通用配置 (一般 设置 ) 1.1 [*] Configure standard kernel features (for small systems) ---> //内核崩溃k原创 2016-07-10 19:16:33 · 419 阅读 · 0 评论 -
字符驱动移植--bus(平台总线), device, driver
bus#include <linux/init.h>#include <linux/module.h>#include <linux/device.h>char bus_version[128] = "bus version v1";// 如果匹配成功,返回1, 失败返回0int mybus_match(struct device *dev, struct device_driver *drv原创 2016-06-24 21:00:00 · 513 阅读 · 0 评论 -
字符驱动移植---(系统总线),device, driver-
led_test.c(参数代码)#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>int main(int argc, char *argv[]){ int fd; int on;原创 2016-06-24 20:50:21 · 387 阅读 · 0 评论 -
LCD屏的移植方法
lcd屏中参数垂直方向: lcd控制器--------- lcd屏自身 ------------------------- 驱动 VSPW tvpw 1<y<20 y=10 vsync_len VBPD tvb-tvpw 23-tvpw原创 2016-07-06 21:50:27 · 858 阅读 · 0 评论 -
mmap将物理地址映射到用户空间
1. 申请空间 void *virt_mem = kzalloc(PAGE_SIZE, GFP_KERNEL);2. 驱动层----->> 实现file_operation接口的.mmap方法 int led_drv_mmap(struct file *filp, struct vm_area_struct *vma) { // vma是一个信息体, 用户提供mmap的请求原创 2016-07-08 09:04:05 · 3159 阅读 · 0 评论 -
linux内核源码目录结构
代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应,其组成如下1.arch 目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC原创 2016-07-08 11:52:20 · 391 阅读 · 0 评论 -
驱动编入内核(移植)---Kconfig的使用
1. 加入到对应的类型中1.在linux-3.0.8/driver@ mkdir mydriver2.linux-3.0.8/driver/mydriver@ touch Makefile Kconfig led_dri.c(新建3个文件(驱动文件要放的目录)) 2.1 在mydriver目录的 Makefile 中写入: obj-$(MYDRIVER) = s5pv210原创 2016-07-08 21:51:37 · 364 阅读 · 0 评论 -
device tree
1 参考板origen的设备数文件为参考 cp arch/arm/boot/dts/exynos4412-origen.dts arch/arm/boot/dts/exynos4412-fs4412.dts2 添加新文件需修改Makefile才能编译vim arch/arm/boot/dts/Makefile,在exynos4412-origen.dtb \ 下添加如下内容 exynos原创 2016-09-13 10:37:27 · 555 阅读 · 0 评论 -
不明白?但想通了
1. 函数的参数是:1.容器 ? 2.传值 ?/* 答:参数为右值时是传值,为左值时是容器。 */2. 调用函数的作用 ?/* 答:函数就相当于加工厂,我把面粉传过去,出来的就是面包。 */原创 2016-07-10 19:04:29 · 242 阅读 · 0 评论 -
内核代码阅读技巧
0. 看代码要分层:1. 找出主线2. 出错判断不看3. 猜函数意思4. 只看看得懂的5. 做笔记、做注释、做总结6. 查百度7. 关注函数的参数(型参中的函数指针很重要)8. 关键词给register和request的函数转载 2016-07-06 15:08:27 · 460 阅读 · 0 评论 -
i2c总线2
i2c是站在soc角度开发的每次发送的数据位8bitack:在第9周期soc把sda拉高,从设备把它拉低i2c控制器(i2c_adapter):i2c协议的时钟(系统自带),与硬件打交道,有算法发送数据和解析数据 adap->algo->master_xfer( )协议:都用英语沟通总线:都有driver、client,匹配正确后调用probe( )方法.匹配是根据 compatibl原创 2017-05-09 11:23:25 · 466 阅读 · 0 评论
分享