嵌入式linux
xdtp
这个作者很懒,什么都没留下…
展开
-
Setup exvim enviroment
exvim setup原创 2023-09-22 12:13:41 · 111 阅读 · 0 评论 -
SD卡初始化、读写流程及其相关CMD
sd卡初始化、读写原创 2023-06-27 10:22:31 · 2008 阅读 · 0 评论 -
字符设备驱动框架及测试程序
字符设备驱动框架及测试程序1. 驱动框架1.1 驱动文件: my_cdev.c1.2 Makefile2. 驱动测试程序2.1 测试文件: my_cdev_test.c2.2 Makefile3. 测试结果(全程打开dmesg)3.0 全程打开dmesg3.1 加载driver3.2 运行test程序3.3 卸载driver4. 附dmesg1. 驱动框架1.1 驱动文件: my_cdev.c#include <linux/module.h>#include <linux/cdev原创 2021-06-24 09:46:41 · 236 阅读 · 0 评论 -
查看PCIe设备的MSI和MSI-X的配置
查看PCIe设备的MSI和MSI-X的配置原创 2021-04-02 10:40:08 · 731 阅读 · 0 评论 -
测试Cgroup下的FROZEN(冻住)/THAWED(解冻)对wait_event_interruptible()的影响
测试Cgroup下的FROZEN/THAWED对wait_event_interruptible的影响一、带有等待队列的字符设备驱动(testdrv.c)二、应用程序(test.c)三、FROZEN/THAWED测试观察及结论NOTE:测试环境------Centos7,Kernel 5.4.24的x86 PC机上一、带有等待队列的字符设备驱动(testdrv.c)#include <linux/fs.h>#include <linux/init.h>#include原创 2021-02-24 20:41:42 · 395 阅读 · 0 评论 -
某平台pcie设备的(host)controller驱动框架及其phy驱动框架(二)
某phy驱动框架1、相关结构2、phy驱动框架NOTE:Kernel version: 5.4.24File Path:drivers/phy/xxxxxx/phy-xxx-pcie.c(省略返回值判断)1、相关结构2、phy驱动框架原创 2021-01-12 20:29:52 · 916 阅读 · 1 评论 -
某平台pcie设备的(host)controller驱动框架及其phy驱动框架(一)
平台pcie设备的controller驱动框架1、相关结构的定义2、controller驱动框架7)编写xxx_pcie_host_init函数6)定义pcie_port的操作函数xxx_pcie_host_ops5)probe函数调用的主要函数4)编写xxx_pcie_probe和xxx_pcie_shutdown函数3)定义.driver.of_match_table2)定义一个platform driver1)入口函数3、phy驱动框架NOTE:Kernel version: 5.4.24Fil原创 2021-01-12 20:26:48 · 1663 阅读 · 0 评论 -
Linux设备驱动开发---USB主机(控制器)与设备驱动(三)
USB主机控制器与设备驱动---主机侧一、Linux USB驱动层次二、USB主机(控制器)驱动三、USB设备驱动3.1 usb_driver3.2 USB请求块(URB)3.3 probe和disconnect函数3.4 USB骨架程序(详解)10)编写skel_delete函数(减少引用计数时使用)9)编写skel_write及其完成函数;8)编写skel_read及依赖函数7)编写skel_open和skel_release函数6)定义skel_class里的成员函数;5)定义usb_class_dr原创 2020-12-30 20:16:14 · 612 阅读 · 0 评论 -
Linux设备驱动开发---USB主机(控制器)与设备驱动(二)
USB主机控制器与设备驱动---主机侧三、USB设备驱动四、实例三、USB设备驱动四、实例原创 2020-12-30 20:11:30 · 414 阅读 · 1 评论 -
Linux设备驱动开发---USB主机(控制器)与设备驱动(一)
USB主机控制器与设备驱动---主机侧一、Linux USB驱动层次1、USB驱动(主机侧)2、USB的逻辑组合(4个层次)二、USB主机(控制器)驱动1、主机控制器规格2、主机控制器的相关结构3、实例:xHCI主机控制器驱动三、USB设备驱动四、实例一、Linux USB驱动层次1、USB驱动(主机侧)NOTE:在Linux 系统中,USB驱动可以从两个角度去观察,一个角度是主机侧,一个角度是设备侧。从主机侧角度看,USB驱动从底到上依次是:USB主机控制器硬件层 --> USB主机控制原创 2020-12-30 20:06:45 · 2034 阅读 · 0 评论 -
Centos7选定默认启动的内核版本
查看系统可用内核cat /boot/efi/EFI/centos/grub.cfg | grep menuentry修改开机时默认使用的内核grub2-set-default 'CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)'查看修改结果grub2-editenv list删除指定内核yum remove kernel-x.xx.x-xxx.el7.x86_64...原创 2020-12-29 11:09:45 · 1058 阅读 · 0 评论 -
Linux设备驱动开发---PCI设备驱动
PCI设备驱动(Linux kernel 4.9.x)一、PCI总线与配置空间1、PCI桥:一种特殊的PCI设备。2、PCI总线的数据结构3、PCI设备的数据结构4、PCI配置空间二、PCI设备驱动结构1、pci_driver结构体2、PCI设备驱动的组成三、驱动实例(省略返回值及部分代码)一、PCI总线与配置空间1、PCI桥:一种特殊的PCI设备。HOST/PCI桥: 连接CPU和PCI根总线;通常被称为“北桥芯片组”。PCI/ISA桥: 连接旧的ISA总线;通常被称为“南桥芯片组”。PCI-原创 2020-12-18 20:38:01 · 397 阅读 · 2 评论 -
Linux驱动开发---网络设备驱动
网络设备驱动(Linux kernel 4.9.x)网络接口层网络协议接口层:net/core/dev.c1.1 重要函数 int dev_queue_xmit(struct sk_buff *skb); /*发送*/ int netif_rx(struct sk_buff *skb); /*接收*/1.2 重要结构体:套接字缓冲区 struct sk_buff{ ... ... /* These elements must be at the end, see原创 2020-12-10 20:21:51 · 457 阅读 · 0 评论 -
Linux驱动开发---块设备驱动
块设备驱动主要结构gendisk结构体:表示一个独立的磁盘设备(或分区)1.1 定义如下:struct gendisk { /* major, first_minor and minors are input parameters only, * don't use directly. Use disk_devt() and disk_max_parts(). */ int major; /* major number of driver */ int fir原创 2020-12-07 16:19:55 · 261 阅读 · 0 评论 -
Linux驱动开发---字符设备驱动
字符设备驱动按键驱动数据结构1.1 设备结构体:缓存键值的buf、缓存按键状态、等待队列、cdev结构体1.2 定时器:软件延时(防抖)1.3 按键硬件信息、键值结构体:记录每个按键对应的中断、GPIO、键值1.4 文件操作结构体:打开、释放、读。流程2.1 确认按键的流程(中断)第一次有按键按下中断,屏蔽中断,延时,再次检测看是否仍是按下状态,若是,则确认按下。否则认为是抖动。2.2 定时器处理流程上述确认按键流程最后,再次查询按键状态是否仍是按下,若是,则将键值录入缓冲区、原创 2020-12-07 16:18:28 · 271 阅读 · 0 评论 -
Linux驱动开发---内存与I/O
内存与I/OMMU功能1.1 虚拟地址和物理地址的映射;1.2 内存访问的权限保护;1.3 Cache缓存控制。相关概念2.1 TLB:转化旁路缓存。缓存虚拟地址与物理地址的转换关系,也称“快表”。2.2 TTW:转化表漫游。在TLB中没有所需的虚拟地址与物理地址的转换关系时,会去主存储器转换表中获取相应关系,并缓存到TLB中。2.3 DTLB/ITLB:数据TLB/指令TLB。2.4 C:高速缓存。2.5 B:缓冲。CPU数据访问流程Linux内存管理内存空间原创 2020-12-02 20:57:41 · 472 阅读 · 0 评论 -
Linux驱动开发---中断和定时器
中断分类向量中断:由硬件提供中断服务程序的入口地址。非向量中断:由软件提供中断服务程序的入口地址。顶半部(top half)/底半部(bottom half)top half: 读取中断状态、清除中断标志后作“登记中断”的工作;—便于服务更多的中断bottom half:完成中断处理的大部分工作;一般比较耗时。Note:一个中断处理不一定都要分为两部分。如果top half本身能够完成整个中断处理,那bottom half也就不需要了。Linux中断编程申请/释放中断:request_原创 2020-11-16 17:02:06 · 263 阅读 · 0 评论 -
互斥体(mutex)
定义和初始化互斥体struct mutex my_mutex; //定义名为my_mutex的互斥体mutex_init(&my_mutex); //初始化获取互斥体void fastcall mutex_lock(struct mutex *lock);//与前者的区别在于,后者引起的睡眠可被信号打断。int fastcall mutex_lock_interruptible(struct mutex *lock);//尝试获取mutex,获取不到mute.原创 2020-09-22 15:15:14 · 432 阅读 · 0 评论 -
互斥机制之信号量(semaphore)
信号量(semaphore)//只有得到信号量的进程才能执行临界区代码;//当获取不到信号量时,进程不会原地打转而是进入休眠等待状态。1.定义信号量struct semaphore sem;初始化信号量//初始化信号量,设置信号量sem的值为val。void sema_init (struct semaphore *sem, int val);void init_MUTEX(struct semaphore *sem);== sema_init (struct semaphore *se原创 2020-09-22 15:13:32 · 554 阅读 · 2 评论 -
互斥机制之自旋锁(spinlock)
一、(基础)自旋锁如果测试结果表明锁仍被占用,程序将在一个小的循环内重复这个“测试并设置”操作,即进行所谓的“自旋”。1.定义自旋锁spinlock_t spin;2.初始化自旋锁spin_lock_init(lock);//该宏用于动态初始化自旋锁lock。3.获得自旋锁spin_lock(lock);//该宏用于获得自旋锁lock。//如果能立即获得锁,就马上返回;否则将自旋在那里,直到该自旋锁的保持者释放;spin_trylock(lock);//该宏尝试获得自旋锁lock。原创 2020-09-21 15:21:41 · 603 阅读 · 0 评论 -
互斥机制之原子操作
一、整型原子操作1.设置原子变量的值void atomic_set(atomic_t*v, int i); //设置原子变量的值为iatomic_t v =ATOMIC_INIT(0); //定义原子变量v并初始化为02.获取原子变量的值atomic_read(atomic_t *v); //返回原子变量的值3.原子变量加/减void atomic_add(int i, atomic_t *v); //原子变量增加ivoid atomic_sub(int i,atomic_t原创 2020-09-21 13:50:33 · 292 阅读 · 0 评论 -
Makefile --- functions
FunctionsCall Syntax$(<function> <arguments>) or ${<function> <arguments>}1) string handling function1.1) subst Usage: $(subst <from>,<to>,<text>) # replace <from> to <to> in <text>.1.2)原创 2020-07-20 11:05:26 · 213 阅读 · 0 评论 -
添加arm系列相关的cross compile toolchain
将共享文件夹中的交叉编译工具压缩包复制到/usr/local/arm文件夹下,并且解压:$sudo cp arm-toolchain.tar.bz2 /usr/local/arm/ $sudo tar xvf /usr/local/arm/arm-toolchain打开配置文件,修改环境变量,将交叉编译器的路径添加到PATH中:$sudo vim ~/.bashrc 然后在文件最后一行中加入内容:export PATH=$PATH:/usr/local/arm/arm-to.原创 2020-07-03 15:53:46 · 320 阅读 · 0 评论 -
git manage project first
进入本地需要push到github的项目,“cd”进入根目录。执行git init命令,初始化本地仓库,会创建一个.git的隐藏文件夹。执行git add .命令,将目录添加入索引执行git commit -m "commit name"执行git remote add origin https://gitlab.xxxxxx.com/xxxxxxx/xxxxxx.git;执行git pull origin master从远程仓库获取更新,在2.9.2之后的版本还需要加上--allow-unre.原创 2020-06-30 19:39:31 · 186 阅读 · 0 评论 -
vim练功秘籍
第一层—菜鸟kjhl --- “上下左右”移动光标i --- 当前光标位置插入dd --- 删除当前行(并将该行内容存到剪贴板里)p --- 粘贴剪贴板:wq --- 存盘+退出:help <command> --- 显示相关命令的帮助第二层—入门(1)各种插入模式 a --- 在光标后插入 o --- 在当前行后一行插入 O --- 在当前行前一行插入 cw --- 替换从光标所在位置后到一个单词结尾的字符 (2)简单的移动光标 0 --- 到本原创 2020-06-30 19:31:45 · 175 阅读 · 0 评论 -
ubuntu 18.04 安装并使用evolution接收公司邮件
打开终端,输入以下命令:sudo apt-get install evolutionsudo apt-get install evolution-ews打开安装成功的evolution,进行配置:前面比较简单,一直下一步,直到最重要的一步如下图:首先选择服务器类型为Exchange网络服务;其次,保证用户名和主机url填写正确。完成上一步,基本就可以保证正常使用了。然后再设置新...原创 2020-02-11 20:47:56 · 2520 阅读 · 0 评论 -
Ubuntu 嵌入式 Arm-aarch64 开发环境搭建
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声...转载 2019-11-23 13:12:56 · 2476 阅读 · 0 评论 -
移植LCD、触摸屏、USB驱动
移植LCD上传二期编写好的lcd驱动文件及其Makefile,修改其Makefile,编译后出现如图错误提示。—修改Makefile —错误提示 根据错误提示,修改驱动文件后,重新编译,编译成功—修改驱动 —编译成功 测试驱动3.1 拷贝ko文件到根文件系统目录里cp lcd.ko /work/nfs_root/fs_mini_mdev_new 3.2 配置(make menuconi原创 2017-12-22 10:24:57 · 1781 阅读 · 0 评论 -
移植LED和按键驱动
移植LED和按键驱动 注:此节主要移植的驱动是在一期编写的驱动移植first_drv(点亮LED)将first_drv整个文件夹上传到 /work/drivers_and_test_new目录下,修改其makefile,编译,出现好多错误(如图)vi Makefilemake解决错误,重新编译(成功) —重新编译 编译测试程序,将可执行程序和上步编译生成的.ko文件拷贝到根文件系原创 2017-12-22 10:22:50 · 455 阅读 · 0 评论 -
移植网卡驱动DM9000
移植DM9000移植编译解决错误2.1 头文件不对 :去掉或改名2.2 宏不对 :改名使用新宏2.3 有些函数没有了 :改名使用新函数移植前的试验—之前移植的3.4.2内核是否已经具有支持smdk2440单板的网卡(否) —之前移植的3.4.2内核是否已经具有支持mini2440单板的网卡(是),并可以成功挂接(mount -t nfs -o nolock,vers=原创 2017-12-22 10:21:15 · 306 阅读 · 0 评论 -
移植3.4.2内核
移植内核linux-3.4.2移植3.4.2内核—框架介绍及简单修改获取linux内核源码获取linux内核源码网站内核启用应用程序(最终目标) <– 挂载根文件系统 <– 装载驱动程序(网卡、Flash) <– 解析TAG参数 <– 根据r1(机器ID),判断能否支持该机器,调用机器相关初始化函数解压内核源码,并首次配置编译内核,并将新内核放到之前创建的根文件系统目录中tar xjf li原创 2017-12-22 10:18:59 · 453 阅读 · 1 评论 -
移植u-boot
移植U-boot(一)初试在官网上下载最新的uboot(u-boot-2012.04.01)压缩包,并将其拖到服务器上;1.1 在SecureCRT上第一次尝试编译 1.2 出错 出错原因:编译工具链版本低。1.3 查看当前交叉编译工具链版本 安装新的编译工具链(arm-linux-gcc-4.3.2);2.1 解压到根目录 2.2 修改环境变量(进入根目录/usr/local原创 2017-12-22 10:09:14 · 352 阅读 · 0 评论 -
移植u-boot之修改代码
(三)修改代码(I)修改代码— 建新板 _ 时钟 _ SDRAM _ UART两个PLL(phase locked loop):1.UPLL:用于USB; 2.MPLL:用于CPU及其他外围器件;2.1 FCLK:CPU提供的时钟信号。在CPU上电后,晶振开始正常工作,此时FCLK=晶振频率,注意此时不存在MPLL,经过PLL电路后,得到MPLL,UPLL。此时FCLK=MPLL。2.2 HCLK:原创 2017-12-22 09:55:50 · 462 阅读 · 0 评论 -
环境搭建
环境搭建安装软件安装VMware及创建虚拟机安装SecureCRT安装FileZilla安装SourceInsight安装驱动(win7)eop驱动1.1 将eop的USB口插到“电脑的USB口”,电脑会自动检测到eop;1.2 依次点击“计算机(右键菜单)”-“设备管理器”,出现两个“USB <==>JTAG&RS232”;注:两个“USB <==>JTAG&RS232”对应“100AS原创 2017-10-27 09:18:22 · 292 阅读 · 0 评论 -
用openjtag检验新的U-Boot是否支持SDRAM
用openjtag检验新的U-Boot是否支持SDRAM用旧版u-boot烧写新的u-boot.bin(由于新的uboot.bin比较大)1.1 现将u-boot-1.1.6的bin文件烧写到Nor Flash,重启开发板;1.2 打开dnw,接上usb-device线,用dnw下载新的U-boot.bin注:这里用u-boot命令下载。 用openocd检验sdram确实不能使用(未修改代码)原创 2017-10-31 19:06:57 · 185 阅读 · 0 评论 -
U-Boot源码(u-boot-2012.04.01)分析start.S中重定位代码
U-Boot源码分析start.S中重定位代码1. 将NOR Flash中的程序复制到SDRAM中r0–addr_sp; r1–ip; r2–addr(33F41000);relocate_code:mov r4, r0 /* save addr_sp */mov r5, r1 /* save addr of gd */mov r6, r2 /* save addr of destinat翻译 2017-10-29 19:10:58 · 276 阅读 · 0 评论 -
uboot之makefile分析
# 分析配置过程:100ask24x0_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0MKCONFIG := $(SRCTREE)/mkconfigmkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0原创 2017-08-30 16:36:28 · 206 阅读 · 0 评论 -
移植块设备驱动和虚拟网卡驱动
移植块设备驱动ramblock(内存模拟磁盘)/* 参考文件: drivers\block\Xd.c drivers\block\Z2ram.c */上传二期编写好的ramblock驱动文件及其Makefile,修改其Makefile,编译后出现如图错误提示。—修改Makefile —错误提示 根据错误提示,修改驱动文件后,重新编译,仍存在一些错误—根据参考文件Z2r原创 2017-12-22 10:26:35 · 422 阅读 · 0 评论 -
spi_controller
使用SPI_Controller实现之前的实验spi_ i2c_ adc文件夹下,创建s3c2440_ spi.c和s3c2440_ spi.h文件(替代之前的gpio_ spi.c和gpio_spi.h),并添加到si工程中。复制gpio_ spi.c文件中的代码到s3c2440_spi.c,在此基础上进行修改。修改代码3.1 初始化GPIO; 3.2 在SPIInit函数中增加对SPI控原创 2018-01-03 15:51:23 · 1482 阅读 · 0 评论 -
ubutun挂载新硬盘详细步骤
查看现有硬盘:sudo fdisk -l给新硬盘进行分区:sudo fdisk /dev/sdb 对新分区进行格式化创建挂载文件夹,将硬盘挂载到该文件夹下 补充:自动挂载 修改/etc/fstab文件:sudo vi /etc/fstab原创 2018-02-06 12:38:32 · 548 阅读 · 0 评论