
Linux驱动开发
文章平均质量分 73
linux驱动相关
嵌入式与Linux那些事
这个作者很懒,什么都没留下…
展开
-
如何获取系统下目录的文件系统类型
文件的格式给出当前系统所安装的文件系统信息。同时也能反映出任何手工安装从而在。下面写个程序提取下设备名,挂载目录,文件系统类型等参数。最近看到一个问题,如何获取当前系统的文件类型?文件中没有包含的文件系统。查看挂载文件系统的状态。mounts文件包含6列。原创 2023-04-07 22:40:12 · 2974 阅读 · 0 评论 -
uboot引导应用程序
裸机程序未加链接地址时,只能使用text代码段,如果裸机程序中使用出现了跨端操作(使用text端段以外的段:rodata,data,bss段),必须在链接时手工指定连接链接地址为实际的运行地址。在uboot examples/standalone 目录下,有hello_world.c文件,编译uboot的时候,会自动编译hello_world.bin文件。uboot默认是支持执行应用程序的,就像引导内核一样,我们也可以自己写一个应用程序,让uboot启动时引导。执行go指令去引导我们的程序。原创 2022-11-26 22:52:59 · 3275 阅读 · 0 评论 -
【RK3399】2.制作ubuntu20.04 roomfs
firefly自带的文件系统,由于缺少一些基本功能模块,因此,我们可以自己手动制作一个ubuntu20.04的文件系统。原创 2022-10-31 22:13:25 · 1843 阅读 · 0 评论 -
【RK3399】1.RK3399开发板基础配置
最近在小黄鱼入手了一个RK3399的开发板,RK的芯片我也是第一次使用。FireFly配套提供了完善的教程,可以在他们的WIKI上找到。上面有的内容就不在本文叙述了,大家可以参考教程https://wiki.t-firefly.com/zh_CN/Firefly-RK3399/linux_compile_gpt.html这篇文章主要如何对板子做一些基础的配置。原创 2022-10-31 22:12:25 · 3364 阅读 · 0 评论 -
ARMv8架构u-boot启动流程详细分析(一)
注:本文基于armv8架构来对u-boot进行启动流程分析,u-boot版本为2022-01。首先引用wiki上的简介:u-boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构。u-boot最先是由德国DENX软件中心团队开发,后续众多有志于开放源码bootloader移植工作的嵌入式开发人员将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持了更多的嵌入式操作系统的装载与引导。选择u-boot的理由:开放源码;支持多种嵌入式操作系统内核的引导,如Linux、NetB转载 2022-07-03 17:35:39 · 2806 阅读 · 0 评论 -
利用QEMU+GDB搭建Linux内核调试环境
前言对用户态进程,利用gdb调试代码是很方便的手段。而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试。其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qemu就是一种。qemu是一款完全软件模拟(Binary translation)的虚拟化软件,在虚拟化的实现中性能相对较差。但利用它在测试环境中gdb调试Linux内核代码,是熟悉Linux内核代码的一个好方法。本文实验环境:ubuntu 20.04busybox-1.32.1Linux kerne原创 2022-04-25 22:15:14 · 2274 阅读 · 0 评论 -
Linux 内核学习经验总结
开篇学习内核,每个人都有自己的学习方法,仁者见仁智者见智。以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下。内核学习,一偏之见;疏漏难免,恳请指正。为什么写这篇博客刚开始学内核的时候,不要执着于一个方面,不要专注于一个子系统就一头扎到实际的代码行中去,因为这样的话,牵涉的面会很广,会碰到很多困难,容易产生挫败感,一个函数体中(假设刚开始的时候正在学习某个方面的某个具体的功能函数)很可能掺杂着其他各个子系统方面设计理念(多是大量相关的数据结构或者全局变量,用于支撑转载 2021-11-20 21:59:54 · 1752 阅读 · 1 评论 -
S3C2410 MMU(存储器管理单元)详述
MMU,全称Memory Manage Unit, 中文名——存储器管理单元。许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块0首先运行,结束时他将转载 2020-09-04 09:57:46 · 3404 阅读 · 0 评论 -
献给新手开发者,如何阅读Linux源码(转)
常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需: 1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统总线、内存的关系(很粗略即可),等等。 2, 关于C语言。不需要已经很精通C语言,只要能熟练编写C程序,转载 2020-08-09 20:16:47 · 2352 阅读 · 0 评论 -
谈谈进程上下文、中断上下文及原子上下文的一些概念
文章目录基本概念上下文原子为什么会有上下文这种概念进程上下文中断上下文进程上下文 VS 中断上下文原子上下文基本概念上下文 上下文是从英文context翻译过来,指的是一种环境。相对于进程而言,就是进程执行时的环境;具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。原子 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" ;为什么会有上下文这种概念 内核空间和用户空间是现代操转载 2020-07-12 21:47:03 · 5062 阅读 · 0 评论 -
uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式
uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式在看Uboot的start.S文件时候,发现其最开始初始化系统,做的第一件事情,就是将CPU设置为SVC模式,但是S3C2440的CPU的core是ARM920T,其有7种模式,为何非要设置为SVC模式,而不是设置为其他模式呢?对此,经过一些求证,得出如下原因:首先,先要了解ARM的CPU的7种模式是哪些:http:...转载 2020-05-21 22:00:21 · 1763 阅读 · 0 评论 -
39.Linux调试测试输入思路
当产品要发布之前,都会进行反复的测试输入,比如:测试按键,遥控,触摸等等.当出现bug时,就还需要不停地找规律,修改程序,直到修复成功,会显的非常麻烦答:可以通过之前在35.Linux-分析并制作环形缓冲区里学的,使用myprintf()保存到环形缓冲区.当出错时,直接可以通过缓冲区里的数据来“复现”输入....原创 2020-03-04 20:24:54 · 947 阅读 · 0 评论 -
28.3.4.2内核下的I2C驱动(三)
参考内核自带的适配器adapter,搜索配置文件i2c-s3c2410.c初始化函数i2c_adap_s3c_init看起static int __init i2c_adap_s3c_init(void){ return platform_driver_register(&s3c24xx_i2c_driver);}platform_driver_registerint ...原创 2020-01-14 10:39:33 · 1035 阅读 · 0 评论 -
27.3.4.2内核下的I2C驱动(二)
用户态直接访问,使用内核提供的驱动程序dev-interface注意,不要直接使用read(),write()操作函数,直接使用i2c_smbus_write_word_data,i2c_smbus_read_word_data。官方文档给了说明,如下驱动程序编译进内核才有效,I2c-dev.c依赖于那些配置项,查看makefilemakemenuconfig,搜索CONFIG...原创 2020-01-13 20:20:06 · 990 阅读 · 0 评论 -
26.3.4.2内核下的I2C驱动(一)
I2C 不同设备ID 设备地址SDA可读可写1.硬件协议2440只负责发送,不知道数据含义,只有外设知道。如何写一个字节?参考AT24CXX 。读之前先写2.软件框架总线-设备-驱动模型把某个结构体,左右的放入链表,一一比较,匹配调用probe函数设备链表 driver链表, 总线提供了match函数linux-2.6.22.6\Documentation\i2c\...原创 2020-01-08 22:51:48 · 1119 阅读 · 0 评论 -
17.NOR FLASH驱动
NOR FLASH硬件原理参考:https://blog.youkuaiyun.com/qq_16933601/article/details/102653367physmap_initstatic int __init physmap_init(void){ int err; err = platform_driver_register(&physmap_flash_driver);#...原创 2019-12-20 21:13:48 · 7160 阅读 · 0 评论 -
15.NAND FLASH驱动
NAND FLASH 原理以及操作详见:https://blog.youkuaiyun.com/qq_16933601/article/details/100001443static int __init s3c2410_nand_init(void){ printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronics\n"); platform_dr...原创 2019-12-18 22:38:07 · 985 阅读 · 0 评论 -
Linux块设备驱动详解
一、机械硬盘1、磁盘结构 传统的机械硬盘一般为3.5英寸硬盘,并由多个圆形蝶片组成,每个蝶片拥有独立的机械臂和磁头,每个堞片的圆形平面被划分了不同的同心圆,每一个同心圆称为一个磁道,位于最外面的道的周长最长称为外道,最里面的道称为内道,通常硬盘厂商会将圆形蝶片最靠里面的一些内道(速度较慢,影响性能)封装起来不用;道又被划分成不同的块单元称为扇区,每个道的周长不同,现代硬盘不同长度的道划分出来...转载 2019-12-15 21:48:27 · 2599 阅读 · 1 评论 -
12.触摸屏驱动
触摸屏子系统是通过input子系统来实现,对应设备节点 /dev/input/eventn,熟悉套路后重点放在硬件程序的编写一、内核自带触摸屏驱动S3c2410_ts的简单分析S3c2410_ts.c (drivers\input\touchscreen) 内核自带三星的触摸屏驱动(1)入口函数:/*注册一个平台driver*/static int __init s3c2410ts_init(void){// init_MUTEX(&gADClock);原创 2019-12-10 20:42:55 · 937 阅读 · 1 评论 -
11.LCD驱动
测试:在/work/system/linux-2.6.22.6 下 make menuconfig 去掉原来的驱动程序-> Device Drivers-> Graphics support S3C2410 LCD framebuffer support2.在/work/system/linux-2.6.22.6 make uImage在/work/system/li...原创 2019-12-06 21:40:00 · 1066 阅读 · 0 评论 -
10.输入子系统
在内核写好一些程序的基础上修改!input_init分析:drivers/input/input.c: input_init > err = register_chrdev(INPUT_MAJOR, "input", &input_fops); static const struct file_operations input_fops = { .owner = THIS_MODULE, .open = input_open_file,};问:怎么读按键?inp.原创 2019-11-26 22:33:01 · 945 阅读 · 0 评论 -
09.字符设备驱动
流程:1.写出最底层Led_Open(),Led_Write(),Led_Read()2.如何让内核知道下面有我们写好的操作硬件的函数呢?定义一个file_operations结构体(指向Led_Open等底层函数)。使用函数regsiter_chrdev(major,”first_drv”,&first_drv_fops)注册告诉内核(通过major索引)。3.regsiter_...原创 2019-11-25 20:30:01 · 1069 阅读 · 43 评论 -
08.构建根文件系统
最小根文件系统的组成:1.dev/console /dev/null 2.init程序(来源busybox)3./etc/inittab 4.配置文件指定的应用程序 5.C库1.配置编辑busybox (1)将busybox-1.7.0.tar.bz2文件上传到ubuntu中work/system,使用tar xjf busybox-1.7.0.tar.bz2解压,查看install文件,...原创 2019-11-25 20:28:10 · 3265 阅读 · 44 评论 -
mknod命令
个人觉得linux的软件设计思想异常强大,比如把所有的设备都当做文件来处理,大大简化了程序员的负担,向提出这个思想的大神s致敬!! 先来看看linux系统中设备管理的基本知识: 我们的linux操作系统跟外部设备(如磁盘、光盘等)的通信都是通过设备文件进行的,应用程序可以打开、关闭、读写这些设备文件,从而对设备进行读写,这种操作就像读写普通的文件一样easy。linux为不同种类的设...转载 2019-11-22 22:51:22 · 878 阅读 · 0 评论 -
07.构建根文件系统之init进程分析
根文件系统有许多命令,比如 ls cp,cd,这些命令其实也就是相当于一个应用程序。这些程序都封装在busybox中。编译busybox后就可以得到busybox,ls等命令就是到busybox的链接,执行ls等命令其实执行的是busybox程序。 busybox应用程序中,ls对应的是ls.c,cp对应的是cp.c。ubbot目的是启动内核,内核的目的是启动应用程序。内核如何启动应用程序...原创 2019-11-06 23:08:48 · 1107 阅读 · 0 评论 -
markdown编辑器的使用
一、插入表格的三种方法1.简单方法name | 价格 | 数量 -|-|-香蕉 | $1 | 5 |苹果 | $1 | 6 |草莓 | $1 | 7 |name价格数量香蕉$15苹果$16草莓$17name | 111 | 222 | 333 | 444- | :-: | :-: | :-: | -:aaa | bb...原创 2019-11-06 20:28:59 · 986 阅读 · 0 评论 -
06.内核启动流程分析之内核启动
内核最终目的:运行根文件系统的应用程序内核做的事情:处理uboot传入的参数arch\arm\kernel/*启动内核:bi_arch_number机器ID。参数存放的地址 bd->bi_boot_params*/theKernel (0, bd->bi_arch_number, bd->bi_boot_params);判断是否支持单板(根据启动内核时传入的机器ID)/**/ENTRY(stext) msr cpsr_c, #PSR_F_BIT | PSR_I_BIT原创 2019-11-04 21:26:38 · 1169 阅读 · 0 评论 -
05.内核启动流程分析之makefile
linux内核makefile文件分类名称描述顶层makefile它是所有makefile文件的核心,从总体上控制着内核的编译、连接.config配置文件,在配置内核时生成。所有makefile文件(包括顶层目录及各级子目录)都是根据.config来决定使用那些文件arch/$(ARCH)/Makefile对于体系结构的...原创 2019-11-03 22:24:13 · 1040 阅读 · 0 评论 -
04.uboot分析之uboot启动内核
首先要明确:uboot目标是从flash读出内核(nand read.jffs2 0x30007FC0 kernel;),启动它(bootm 0x30007FC0)。/*从NAND读出内核:从哪里读,从kernel分区读 放到哪里去:0x30007FC0(可以随便放)nand read.jffs2 0x30007FC0 0x00060000 0x00200000*/nand re...原创 2019-11-01 20:28:03 · 1410 阅读 · 0 评论 -
03.uboot分析之源码第二阶段
uboot目标:从flash读出内核(nand read.jffs2 0x30007FC0 kernel;),启动它(bootm 0x30007FC0)。/*初始化nor flash*/#ifndef CFG_NO_FLASH /* configure available FLASH banks */ size = flash_init (); display_flash_config...原创 2019-10-31 20:53:56 · 1038 阅读 · 0 评论 -
02.uboot分析之源码第一阶段
之前写的硬件相关的裸机源码的流程和uboot差不多。之前的实验主要完成以下操作: (1)初始化:关看门狗,初始化时钟,初始化sdram。 (2)程序很大时,把程序从nandflash拷贝到sdaram。 (3)调用C函数必须设置栈sp一、cpu/arm920t/start.s启动文件分析.globl _start/*跳转到reset*/_start: b res...原创 2019-10-30 21:14:09 · 1326 阅读 · 0 评论 -
01.uboot分析之makefile结构分析
一、分析配置过程(make 100ask24x0_config)1.执行make 100ask24x0_config配置uboot时,就相当于执行下面红框中的话。MKCONFIG := $(SRCTREE)/mkconfig/*源文件所在的目录下面找mkconfig*/100ask24x0_config : unconfig@$(MKCONFIG) $(@:_config=) arm...原创 2019-10-29 22:47:51 · 1347 阅读 · 0 评论