
嵌入式Linux
文章平均质量分 81
WDS视频总结
巴德鸟
这个作者很懒,什么都没留下…
展开
-
linux 命令行分区 文件系统 fdisk 安装QQ
# 查看有哪些盘ls -al /dev/sd*# 列出当前所有的盘 挂载信息 分区信息sudo fdisk -l# 删除分区 或者 新建分区,删除分区根据提示 m --- d ---- 1sudo fdisk /dev/sdb # sdb操作的是这块盘# 格式化 制作文件系统sudo .ext4 /dev/sdb...原创 2021-05-13 17:34:23 · 226 阅读 · 0 评论 -
GDB调试
linux下如何调试的(用gdb调试)命令行调试gdb基本全裸,在用gcc编译的时候加上 -g ,然后`gdb + 运行文件`,run开始,s (step),n (next),b (break),list 显示10行 list 24 显示第24行的前后5行clear lineNum 删除行号为lineNum处的断点clear function #删除函数名为function处的断点delete 删除所有断点file gdb-test1命令行 + 代码 gdb -tui穿了原创 2021-05-13 16:25:33 · 78 阅读 · 0 评论 -
烧写程序的多种方法,下载
烧写裸板程序oflash软件烧写通过OpenJTAG直接下载到Nor—Nand—RAMdnw USB下载首先通过zadig-2.3安装USB相关驱动在uboot运行的前提下,通过uboot参数设置下载到哪里,然后用dnw下载到对应存储器,开机选择正确的启动方式即可tftp下载烧写配置tftp服务端需要分享的目录,tftpd32.exe在uboot配置ipaddr和serverip...原创 2021-05-13 16:19:15 · 605 阅读 · 0 评论 -
WDS2期第30课2.1 符号表 驱动调试之段错误分析 结合内核打印信息PC值 确定地址范围是属于内核还是加载模块的空间System.map 查看内核或模块反汇编文件
大致流程如下:结合内核打印信息PC值 ,确定地址范围是属于内核还是加载模块的空间 ,查看内核或模块反汇编文件需要详细栈回溯信息(栈里面函数的调用关系) 必须 在编译内核时 打开CONFIG_FRAME_POINTER驱动程序的调试一. 打印: prink, 自制proc文件UBOOT传入console=ttySAC0 console=tty1内核处理UBOOT传入的参数console_setupadd_preferred_console // 我想用名为"ttySAC0"的控制台原创 2021-05-12 09:28:44 · 385 阅读 · 0 评论 -
WDS2期第32课 1 3.4.2内核下的I2C驱动之框架
文章目录时序,读写流程,总线设备驱动模型,虚拟的IIC驱动框架 分三层 设备驱动 总线驱动(核心层 适配器)IIC 总线设备驱动时序,读写流程,总线设备驱动模型,虚拟的IIC驱动框架 分三层 设备驱动 总线驱动(核心层 适配器)IIC 总线设备驱动左边注册一个设备,i2c_client右边注册一个驱动,i2c_driver比较名字id,相同则probe,在probe函数里为所欲为...原创 2021-05-13 16:17:44 · 165 阅读 · 0 评论 -
WDS2期第31课 2 app调试strace 应用调试gdb,另外的-安装某些库提示未定义找不到时处理 -I没有去编译库里找 根据结果修改头文件
gdb在pc运行,gdb-server在ARM 板子上运行,gdb-server是arm app的父进程。设置 host target编译gdb安装 到 tmp默认安装到pc机,可以改变安装目录,查看vi Makefile,修改默认安装目录的前缀,prefix编译gdb-server,进入server目录,头文件在 -I选项里找,还会在编译工具的库里找,如果提示在-I中找不到,查看系统变量编译工具库在哪里echo $PATH,然后进入编译工具所在的库,查找找不到的东西grep原创 2021-05-12 09:27:59 · 114 阅读 · 0 评论 -
WDS2期第30课 3 4 内核僵死 无法输入也没反应 当内核卡死时利用内核心脏时钟中断检查连续10s内都是同一个pid则就是这个进程出问题,pt_regs结构体保存R寄存器值,打印PC后回到前分析
在内核时钟中断中加入打印pid和进程名信息。当内核卡死时,利用内核心脏时钟中断处理函数检查连续10s内都是同一个pid则就是这个进程出问题。查看内核中断,30号中断是时钟中断,查找Timer Tick,在这里,中断处理函数,代码在这里卡死,打印出信息,...原创 2021-05-12 09:26:11 · 198 阅读 · 0 评论 -
WDS2期第30课2.2没什么东西
根据栈信息分析函数调用过程./firstdrvtest onUnable to handle kernel paging request at virtual address 56000050pgd = c3e78000[56000050] *pgd=00000000Internal error: Oops: 5 [#1]Modules linked in: first_drvCPU: 0 Not tainted (2.6.22.6 #48)PC is at first_drv_.原创 2021-05-12 09:24:26 · 86 阅读 · 0 评论 -
WDS2期第29课 1 2 3 裸板调试方法 点灯 串口 JTAG 重定位前的代码不能用源码级别的调试只能用汇编级别的调试,逐条指令调试。
裸板调试方 需要结合汇编源码点灯串口打印JTAGJTAG(Joint Test Action Group,联合测试工作组),主要用于芯片内部测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。JTAG位于CPU内部,当cpu与外设的地址信号,数据信号都要经过JTAG。电脑上的应用程序有 keil、ADS、openOCDJTAG调试器有Jlink、并口wigger、openJTAG。可以控制cpu,如,当地址信号 == xxx 时,让原创 2021-05-12 09:24:18 · 170 阅读 · 0 评论 -
WDS2期第27课 1 2 3 DMA 数据搬运工作 源 目的 长度 搬运完成产生DMA中断
DMA(Direct Memory Access,直接存储器访问)cpu命令DMA控制器,搬运工作由DMA控制器完成。如mic采集到数据存入自己的i2s中buff,满了之后产生DMA请求,DMA根据原地址目的地址长度拷贝数据。原创 2021-05-12 09:24:08 · 425 阅读 · 0 评论 -
WDS2期第24课 2 IIC Linux下驱动程序 i2c_driver结构体里有attach_adapter 用i2c总线驱动程序的i2c_transfer函数收发数据
1原创 2021-05-12 09:24:00 · 435 阅读 · 0 评论 -
WDS2期第24课 1 IIC 驱动框架 adapter和drv 最终drv的attach_adapter的i2c_probe中adapter.master_xfer确定设备然后function
APP: open read write-----------------------------------------------------------drv_open drv_read drv_write IIC设备驱动,知道数据含义 drivers\i2c\chip-----------------------------------------------------------I2C总线驱动程序: 1识别 2提供读写函数, 知道怎么收发数据 drivers\i2c\busses原创 2021-05-12 09:23:53 · 195 阅读 · 0 评论 -
WDS2期第23课 2 IIC 裸板程序
程序假设从nand启动,上电时nand前4k被自动复制到片内4K内存SRAM,head.S@******************************************************************************@ File: head.S@ 功能: 设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行@************************************************************************原创 2021-05-12 09:23:44 · 165 阅读 · 0 评论 -
WDS2期第23课 1 IIC(Inter-Integrated Circuit) 简单介绍 起始停止ACK
文章目录参考资料`IIC` 即**Inter-Integrated Circuit**(集成电路总线)6个通信信号器件地址寻址过程写数据读数据8bit数据传输完 ACK不一定有参考资料参考 面试总结,Linux中IIC驱动框架等参考 程序代码,传输流程理解IIC 即Inter-Integrated Circuit(集成电路总线)I2C总线是PHLIPS公司推出的一种串行总线。I2C总线只有两根双向信号线。一根是 数据线SDA,另一根是 时钟线SCL。起始信号 SCL为高时,SDA由高变低;原创 2021-05-12 09:23:34 · 391 阅读 · 0 评论 -
WDS2期第22课 1 2 3 网卡DM9000C移植 配置基地址、中断、引脚时序时间(默认的可用,更快要调自己设置) 内存控制器 位宽与读取数据字节长度
1原创 2021-05-11 09:13:23 · 199 阅读 · 0 评论 -
WDS2期第21课 1 2 网卡驱动框架 模拟虚拟网卡接收sk_buff上报 一般网卡厂家都会给驱动程序,修改即可
文章目录比较字符设备 和 块设备网卡驱动网卡驱动框架网卡设备驱动编程步骤:程序一 虚拟网卡 注册设备 没做其他代码测试程序二 加入发送函数比较字符设备 和 块设备比较字符设备和块设备,字符设备。字符设备,首先在user中先open一个 /dev/xxx,块设备,首先挂接一个盘 mount /dev/xxx。主设备号fopsregister入口出口块设备,对普通文件的读写,通过文件系统最终转换成对扇区的读写,分配 gendiskalloc_disk设置,queue = blk原创 2021-05-11 09:12:49 · 237 阅读 · 0 评论 -
WDS2期第20课 3 nor驱动程序 只需硬件相关操作
文章目录第一个程序 简单框架 内核识别nor第一个程序代码简单测试第一个程序,插入能否识别nor第二个程序 添加了分区add_mtd_partitions第二个程序代码测试第二个程序 格式化 往nor分区写文件用内存模拟MTD flash 只是介绍无实验解析内核识别nor的过程cfi模式jedec模式参考drivers\mtd\maps\physmap.c。最后分析出我们配置硬件相关需要做:分配map_info结构体设置 物理基地址(phys)、大小(size)、位宽(bankwidth) 虚拟原创 2021-05-11 09:12:40 · 187 阅读 · 0 评论 -
WDS2期第20课 2 NOR FLASH 驱动框架 差异最小-基地址和位宽
文章目录nor flash驱动框架 分析配置内核支持nor flashnor flash驱动框架 分析协议层已经做好,需要配置的是硬件相关的设置,基地址和位宽。字符设备就找字符设备驱动程序,普通文件就找文件系统 找到块设备驱动,文件系统把对文件的读写转换成对块设备的读写。RAMblock,硬盘,MTD(nand(jedec cfi) nor)。nor 和 nand 的差异最小到基地址和位宽,所以可以通过配置使得通用,在drivers\mtd\maps\physmap.c中,入口函数 注册平原创 2021-05-11 09:12:31 · 221 阅读 · 0 评论 -
WDS2期第20课 1 NOR FLASH原理及硬件操作 nand nor比较 uboot测试norflash 读和内存一样 写需要进入program模式
搜索原创 2021-05-11 09:12:22 · 502 阅读 · 0 评论 -
WDS2期第19课 3 NAND驱动程序编写 cpu与nand的引脚电平时序对应,add_mtd_partitions,nfs启动-加载nand驱动-格式化nand-挂接
文章目录设置电平维持时间的寄存器,需要将cpu和nand对应看代码2 代码1是need_sth这里没有实验2 nand识别 没有add_mtd_partitions函数nand位反转 解决办法ECC码解决反转代码3 完善add_mtd_partitions函数测试代码3参考:drivers\mtd\nand\s3c2410.cdrivers\mtd\nand\at91_nand.c设置电平...原创 2021-05-11 09:12:12 · 293 阅读 · 0 评论 -
WDS2期第19课 2 NAND驱动框架
每一层专注自己的一小块,命令层关注 具体怎么收发,协议层关注 收发什么实现控制(识别 读写 擦除),块设备关注 优化工作(合并 调序等),字符设备直接调取mtd_info的read write就行。查看内核启动信息,从这里开始分析,drivers\mtd\nand\s3c2410.c"S3C24XX NAND Driver, (c) 2004 Simtec Electronics"...原创 2021-05-11 09:08:25 · 105 阅读 · 0 评论 -
WDS2期第19课 1 NAND原理及硬件操作 通过命令在uboot中操作NAND 连续发送5个周期的地址值
1原创 2021-05-11 09:08:18 · 339 阅读 · 0 评论 -
WDS2期第18课 3 块设备驱动程序 用内存模拟磁盘 电梯算法 读取写入 分区 格式化
文章目录程序1 用内存模拟磁盘 简单处理请求do_ramblock_request测试程序1 简单查看块设备信息程序2 分配内存作为模拟磁盘 磁盘和req->buffer之间拷贝数据测试程序2程序3 在读写时加了打印程序3测试程序3接着测试总结参考drivers\block\xd.c和drivers\block\z2ram.cls /dev/sd* -l 查看所有磁盘设备,次设备号为0的...原创 2021-05-11 09:08:08 · 193 阅读 · 0 评论 -
WDS2期第18课 1 2 块设备驱动程序 分析ll_rw_block底层读写块 文件系统将对文件的读写转化成对扇区的读写
文章目录总结字符设备驱动程序块设备驱动程序块设备驱动程序框架从ll_rw_block 开始分析 low level read-write block底层读写块怎么写块设备驱动程序总结字符设备驱动程序查询方式:在读函数中返回引脚状态,比较前后值。(cpu占用太高)休眠唤醒:用户读驱动读,没有数据休眠,有数据被中断服务程序唤醒然后copy_to_user。(没有数据则一直休眠)poll机制...原创 2021-05-10 22:29:09 · 190 阅读 · 0 评论 -
WDS2期第17课 3 4 USB设备驱动程序1简单编写 鼠标按键lse usb request block struct urb 总线驱动设备模型提供数据 设备驱动程序处理数据
如何写驱动程序USB总线驱动程序 在我们接入USB设备时会自动构建一个USBdevice并注册到bus的dev中。我们需要做的是构建driver驱动程序,将程序注册到bus中。如何写USB设备驱动程序:分配/设置usb_driver结构体.id_table 支持哪些设备.probe USB总线驱动程序发现设备后比较id,如果支持则probe.disconnect注册参考USB...原创 2021-05-10 22:28:28 · 138 阅读 · 0 评论 -
WDS2期第17课 2 USB总线驱动程序 接设备-测电平-生中断-分配编号-告知设备-取描述符-注册dev-放入bus的dev链表-读出drv-比较匹配-调用drv的probe
1原创 2021-05-10 22:28:17 · 109 阅读 · 0 评论 -
WDS2期第17课 1 USB驱动程序之概念介绍 电平 传输类型 USB驱动框架图 app->USB设备驱动程序->USB总线驱动程序->USB主机控制器->USB设备
1原创 2021-05-10 22:28:07 · 155 阅读 · 0 评论 -
WDS2期第16课 1 2 3 触摸屏 TS 打开ADC时钟 设置ADC的寄存器 采集电压 处理异常值 filter 上报事件 LCD和触摸对应 需要tslib库 校准触摸屏
文章目录打开ADC时钟 设置寄存器`CLKCON` bit15为1adc的分辨率,1bit刻度表示3.3/(2^10-1)=0.003v=3mv设置ADC的ADC/TS的寄存器,ADCCON寄存器ADCTSC寄存器 等待中断模式ADCDAT0寄存器程序一 实现按下松开测试触摸 按下和松开 (程序一)触摸屏ADC自动的ADC转换模式程序二 测量x y电压打印出来问题,返回值不连续,也无法滑动长按...原创 2021-05-10 22:27:57 · 622 阅读 · 0 评论 -
WDS2期第15课 2 3 4 LCD驱动程序之硬件操作 固定 可变参数 配置LCD控制器 LCD液晶时序和s3c的LCD时序,划内存做显存 调色板 输入子系统按键和LCD测试
文章目录第一个程序,不能用,只有步骤注释第二个程序,不能用,完成了一些步骤配置硬件相关设置LCDCON1:设置LCDCON2:设置LCDCON3/4:设置 LCDCON3,4设置 LCDCON5分配显存 用SDRAM代替第三个程序,调色板没有设置调色板第四个程序,基本完成但是我找不到s3c_lcd_fbinfo->fix.smem_start显存的物理地址测试1. make menuconf...原创 2021-05-10 22:27:47 · 244 阅读 · 0 评论 -
WDS2期第15课 1 内核LCD驱动层次分析 fbmem.c -- register_framebuffer -- 硬件 抽象出来的fbmem.c依赖底层硬件相关的数组registered_fb
内核自带的LCD驱动程序,在drivers\video\fbmem.c中,fbmem.c提供的都是抽象的,具体的实现依赖里边的数组registered_fb[iminor(inode)],fb帧缓冲区(Frame Buffer),可以看到以下步骤:majorfopsregister_chrdevclass_create没有 class_device_create...static...原创 2021-05-10 22:27:39 · 564 阅读 · 4 评论 -
WDS2期第14课 驱动程序分层分离概念 总线驱动设备模型 dev(struct resource)和drv(get_resource) 关心probe是核心
文章目录驱动程序分层分离概念总线驱动设备模型 match简单分析platform例子,代码1,bus_drv_dev框架简单应用led_dev.cled_drv.c测试1代码2,bus_drv_dev 在led中的应用led_dev.cled_drv.c测试2驱动程序分层分离概念3分离分层,将硬件相关代码和纯软件代码分离,然后修改各自的代码都向上层注册,分层。总线驱动设备模型 match...原创 2021-05-10 22:27:27 · 518 阅读 · 0 评论 -
WDS2期第13课 2 输入子系统 1分配一个input_dev结构体 2设置 3注册 4硬件相关操作 重复事件修改定时器超时时间 改标准输入到指定设备exec <
自己写驱动程序用户需要open,read,write驱动也要完成对应的drv_open, drv_read, drv_write主设备号构造fops.read.open.poll.fasyncregister_chrdev(major, name, fops)入口出口LICENSE以前在一个文件里把所有写完,在输入子系统里被拆分为几个文件,我们需要做的是:分配in...原创 2021-05-10 22:27:13 · 210 阅读 · 0 评论 -
WDS2期第13课 1 输入子系统框架 input.c是核心层 代表硬件input_dev 纯软件input_handler input_handle连接
之前写的代码只适合内部使用,不能通用,也许通过scanf就要去打开某个设备.想要用户代码无需任何修改就能使用之前的驱动, 就要引入输入子系统.…,…,.,.,....原创 2021-05-10 22:26:47 · 265 阅读 · 0 评论 -
WDS2期第30课 1.3 create_proc_entry printk输出到自己的log文件模仿 /proc/kmsg myprintk 读睡眠写后唤醒 EXPORT_SYMBOL
文章目录让printk的输出到自己的log文件 /proc/my_msg程序1 能在/proc/xx打开文件 框架源代码1实验1程序2让printk的输出到自己的log文件 /proc/my_msg在用户的命令行中 执行 cat /proc/kmsg时候,进入内核态,内核找到对应的fops调用read,在read中copy_to_user对proc的操作函数在fs/proc中,参考fs/proc/proc_misc.c,程序1 能在/proc/xx打开文件 框架源代码1#include <原创 2020-09-15 09:53:56 · 379 阅读 · 0 评论 -
WDS2期第30课 1.1 1.2 驱动调试之printk的使用 #define DBG_PRINTK printk 修改log_level调整打印级别
1原创 2020-09-15 09:52:31 · 686 阅读 · 0 评论 -
JZ2440 v3.0 linux-3.4.2 busybox1.20.0内核 和 文件系统移植 修改分区大小 yaffs2文件系统补丁 开源资源查找
文章目录零、平台 + 软件版本 + 烧写平台 和 版本烧写一、编译系统的一堆命令1. 编译uboot2. 编译内核3. 文件系统 yaffs2额外的,自启动脚本配置 + 自动配置网卡二、修改默认分区大小1. 修改uboot的宏2. 修改内核的mtd分区大小和偏移三、在源码中修改uboot的tftp ip四、报错1. 读出内核但是 内核校验出错1. 解决办法2. 版本3.4.2内核无法识别yaffs2文件系统2. 解决办法3. 文件系统挂上了 后面出错3. 解决办法五、打印信息u-boot打印信息1. u-b原创 2020-09-11 12:01:57 · 685 阅读 · 2 评论 -
WDS1期第12课 字符设备驱动 9 keys较完整的驱动 增加利用定时器消抖 struct timer_list 直到抖到最后一次进中断,再调keys_timer_function去获取按键状态
文章目录驱动代码用户代码修改超时时间jiffies, jiffies是全局变量,每隔10ms系统产生一个时钟中断, 10ms每次进中断都修改jiffies往后延迟10ms, 10ms内可能多次进入中断,直到抖动到最后一次进中断 后超时,然后调用keys_timer_function去获取按键的状态驱动代码#include <linux/init.h> // mo...原创 2020-06-20 08:49:25 · 169 阅读 · 0 评论 -
windows ubuntu VMware board 嵌入式开发板与pc的网络连接方法
1. 单系统+开发板 最方便的连接方法使用路由器单系统windows或ubuntu直接连接路由器(有线无线皆可),开发板有线直接连接路由器,只要保证系统和开发板处于同一网段就可以连通。2. windows+VMware 开发板这种情况是无法从路由器引线连接到开发板,但要保证PC有两个网卡且至少有一个有线网卡(有线网卡和开发板连接)。虚拟机不能上网 连接开发板在虚拟机ubuntu系统中...原创 2020-06-20 08:48:08 · 1001 阅读 · 0 评论 -
ARM的一些基本功arm汇编 处理器处理能力
ARM寄存器的分类和三种寻址方式讲的很清楚:https://blog.youkuaiyun.com/Sandeldeng/article/details/52954781**间接寻址:**通过 以存储在寄存器上的值为地址去从内存上读数据,汇编中[r0],对应于C语言中的指针 ×p。LDR(load register)指令 将内存内容加载入通用寄存器STR(store register)指令 将寄存器内...原创 2020-06-20 08:47:19 · 771 阅读 · 0 评论 -
视频学 uboot简单使用,移植时需要
Uboot是一款软件,是bootloader的一个子系统print 打印出uboot的环境变量变量名=变量值setenv saveenv 设置环境变量set只保存在RAM中,saveenv才保存到flash原创 2020-06-20 09:00:48 · 250 阅读 · 0 评论