
linux
听枫要靠谱
这个作者很懒,什么都没留下…
展开
-
linux相关gpio函数
/home/ysy/linux/IMX6ULL/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/include/linux/gpio.hstatic inline int gpio_direction_output(unsigned gpio, int value){ return -ENOSYS;}/home/ysy/linux/IMX6ULL/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/include/asm-generi原创 2022-04-20 21:50:01 · 720 阅读 · 0 评论 -
linux下的gpiod_get和gpiod_get_index
#define __gpiod_get(dev, con_id, flags, ...) __gpiod_get(dev, con_id, flags)#define gpiod_get(varargs...) __gpiod_get(varargs, GPIOD_ASIS)#define __gpiod_get_index(dev, con_id, index, flags, ...) \ __gpiod_get_index(dev, con_id, index, flags)#define g原创 2022-04-16 20:49:49 · 2621 阅读 · 1 评论 -
platform_get_resource
platform_get_resource 这个函数跟设备树没什么关系,但是设备树中的节点被转换为platform_device后,设备树中的reg属性、interrupts属性也会被转换为“resource”。这时,你可以使用这个函数取出这些资源。一 个 节 点 能 被 转 换 为 platform_device , 如 果 它 的 设 备 树 里 指 定 了 中 断 属 性 , 那 么 可 以 从platform_device 中获得“中断资源”,函数如下,可以使用下列...原创 2022-04-16 13:49:57 · 2693 阅读 · 1 评论 -
LINUX下浮点运算
在内核中尽量不要使用浮点运算,所以不要在驱动将原始值转换为对应的实际值,因为会涉及到浮点计算。可以在应用程序中在计算,如果测试APP 中用到了浮点计算,而 I.MX6U 是支持硬件浮点的,因此我们在编译 icm20608App.c 的时候就可以使能硬件浮点,这样可以加速浮点计算。使能硬件浮点很简单,在编译的时候加入如下参数即可:-march-armv7-a -mfpu-neon -mfloat=hard输入如下命令使能硬件浮点编译 icm20608App.c 这个测试程序:arm-linu.原创 2022-04-14 14:07:07 · 1318 阅读 · 0 评论 -
linux下的msleep(),mdelay函数解析
sleep()函数:static inline void ssleep(unsigned int seconds){ msleep(seconds * 1000);}msleep函数:void msleep(unsigned int msecs){ unsigned long timeout = msecs_to_jiffies(msecs) + 1; while (timeout) timeout = schedule_timeout_uninterruptible(t原创 2022-04-11 19:58:17 · 4692 阅读 · 0 评论 -
Linux环境变量设置/etc/profile、/etc/bashrc、~/.profile、~/.bashrc区别
登入系统读取步骤: 当登入系统时候获得一个shell进程时,其读取环境设定档有三步 : 1.首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/profile.d和/etc/inputrc 2.然后根据不同使用者帐号,去其家目录读取~/.bash_profile,如果这读取不了就读取~/.bash_login,这个也读取不了才会读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系 3.然后在根据用户帐原创 2022-03-28 13:48:04 · 410 阅读 · 0 评论 -
linux下的stat/lstat函数
Linux 下可以使用 stat 命令查看文件的属性,其实这个命令内部就是通过调用 stat()函数来获取文件属性的,stat 函数是 Linux 中的系统调用,用于获取文件相关的信息,函数原型如下所示(可通过"man 2 stat"命令查看): #include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat/lstat(const char *pathname, struct s原创 2021-10-19 09:52:52 · 835 阅读 · 0 评论 -
软连接和硬连接(Linux创建软连接一定要用绝对路径)
一、Linux连接文件Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。inode:记录文件属性,一个文件一个inode。inode相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。二、ln命令ln命令用于创建连接文件:ln[选项] 源文件 目标文件选项:-s创建符号链接(软连接)ln 源文件 目标文件(不需要参数,是硬连接)-f...原创 2021-10-18 17:02:31 · 3186 阅读 · 1 评论 -
Linux 多点电容触摸屏实验(1)
1.多点电容触摸简介ATK-7016 这款屏幕其实是由 TFT LCD+触摸屏组合起来的。底下是 LCD 面板,上面是触摸面板,将两个封装到一起就成了带有触摸屏的 LCD 屏幕。电容触摸屏也是需要一个驱动 IC的,驱动 IC 一般会提供一个 I2C 接口给主控制器,主控制器可以通过 I2C 接口来读取驱动 IC里面的触摸坐标数据。ATK-7016、ATK-7084 这两款屏幕使用的触摸控制 IC 是 FT5426,ATK- 4342 使用的驱动 IC 是 GT9147。这...原创 2021-09-10 09:36:35 · 1483 阅读 · 0 评论 -
Linux RS232/485/GPS 驱动实验(4)-minicom移植
minicom 类似我们常用的串口调试助手,是 Linux 下很常用的一个串口工具,将 minicom移植到我们的开发板中,这样我们就可以借助 minicom 对串口进行读写操作。 1、移植 ncurses minicom 需要用到 ncurses,依次需要先移植 ncurses,如果前面已经移植好了 ncurses,那么 这里就不需要再次移植了,只需要在编译 minicom 的时候指定 ncurses 库和头文件目录 即可。 首先在 ubuntu 中 创 建 一 个 目 录 来 存 放原创 2021-08-09 19:12:23 · 1155 阅读 · 0 评论 -
Linux RS232/485/GPS 驱动实验(3)-设备树修改
1、UART3 IO 节点创建 UART3 用到了 UART3_TXD 和 UART3_RXD 这两个 IO,因此要先在 iomuxc 中创建 UART3 对应的 pinctrl 子节点,在 iomuxc 中添加如下内容: 1 pinctrl_uart3: uart3grp { 2 fsl,pins = < 3 MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0X1b0b14 MX6UL_PAD_UART3_RX_DATA__UART3_原创 2021-08-07 21:12:19 · 1245 阅读 · 0 评论 -
Linux RS232/485/GPS 驱动实验(2)-UART 驱动分析
1、UART 的 platform 驱动框架 打开 imx6ull.dtsi 文件,找到 UART3 对应的子节点,子节点内容如下所示:1 uart3: serial@021ec000 { 2 compatible = "fsl,imx6ul-uart", 3 "fsl,imx6q-uart", "fsl,imx21-uart"; 4 reg = <0x021ec000 0x4000>;5 interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_原创 2021-08-07 20:46:45 · 556 阅读 · 0 评论 -
Linux RS232/485/GPS 驱动实验(1)
Linux 下 UART 驱动框架 1、uart_driver 注册与注销 uart_driver需要驱动编写人员实现,并使用uart_register_driver注册到内核,卸载驱动的时候,使用uart_unregister_driver卸载。同 I2C、SPI 一样,Linux 也提供了串口驱动框架,我们只需要按照相应的串口框架编写驱动程序即可。串口驱动没有什么主机端和设备端之分,就只有一个串口驱动,而且这个驱动也已经由NXP 官方已经编写好了,我们真正要做的就是在设备树中添加所要使原创 2021-08-07 19:58:38 · 466 阅读 · 0 评论 -
linux驱动-非阻塞IO实验
Unable to handle kernel NULL pointer dereference at virtual address 00000004是以为我定义wait_queue_head_t r_wait; /等待队列头/,而没有初始化定义好等待队列头以后需要初始化,使用 init_waitqueue_head 函数初始化等待队列头,函数原型如下:void init_waitqueue_head(wait_queue_head_t *q)参数 q 就是要初始化的等待队列头。也可以使用原创 2021-07-19 13:27:51 · 301 阅读 · 0 评论 -
linux中断
一、Linux内 核中断处理简介1.1、裸机中断1.2 linux中断1、先知道你要使用的中断对应的中断号。2、先申请request_irq,此函数会激活中断。3、如果不用中断了,那就释放掉,使用free_irq。4、中断处理函数irqreturn_t (*irq_handler_t) (int, void *)。5、使能和禁止中断,1.3 上半部和下半部中断一定要处理的越快越好,1、软中断static struct softirq_action softirq_vec[NR_SOF原创 2021-07-15 12:39:22 · 98 阅读 · 0 评论 -
vim使用方法
一、vim编辑器Linux系统都会自带vi编辑器,但是vi编辑器太难用了!所以建议大家安装vim编辑器,安装命令:sudo apt-get install vim二、vim编辑器三种工作模式vi xxx 使用vi编辑器打开文件。一般模式(指令模式):默认模式,用vi打开一个软件以后自动进入到此模式。编辑模式:一般模式中无法编辑文件,要编辑文件就要进入编辑模式,按下“i、I、a、A、o、O、s、r”等就会进入到编辑模式。一般按下“a”进入编辑模式。按下ESC键可退出编辑模式。命令行模式(底行模式原创 2021-06-08 10:16:44 · 316 阅读 · 0 评论 -
linux驱动
学习驱动开发时,创建设备类,用到函数class_create()和class_destroy()报以下错误:解决方法是把MODULE_LICENSE(“GML”);换成MODULE_LICENSE(“GPL”);。再编译就能通过。原创 2021-05-01 13:08:52 · 79 阅读 · 0 评论 -
字符驱动框架
一、字符设备驱动框架字符设备驱动的编写主要就是驱动对应的open、close、read。。。其实就是file_operations结构体的成员变量的实现。二、驱动模块的加载与卸载Linux驱动程序可以编译到kernel里面,也就是zImage,也可以编译为模块,.ko。测试的时候只需要加载.ko模块就可以。编写驱动的时候注意事项!1、编译驱动的时候需要用到linux内核源码!因此要解压缩linux内核源码,编译linux内核源码。得到zImage和.dtb。需要使用编译后的到的zImage和dt原创 2021-04-24 19:02:27 · 197 阅读 · 0 评论 -
应用和驱动的关系
一、应用程序和驱动的交互原理1、驱动就是获取外设、或者传感器数据,控制外设。数据会提交给应用程序。Linux驱动编译既要编写一个驱动,还要我们编写一个简单的测试应用程序,APP。单片机下驱动和应用都是放到一个文件里面,也就是杂糅到一起。Linux下驱动和应用是完全分开的。用户空间(用户态)和内核空间(内核态):Linux操作系统内核和驱动程序运行在内核空间、应用程序运行在用户空间。应用程序想要访问内核资源,怎么办,有三种方法:系统调用、异常(中断)和陷入。应用程序不会直接调用系统调用,而是通过原创 2021-04-24 19:01:29 · 1201 阅读 · 0 评论 -
Linux驱动开发思维
一、裸机驱动开发回顾1、底层,跟寄存器打交道,有些MCU提供了库。2、二、Linux驱动开发思维1、Linux下驱动开发直接操作寄存器不现实。2、根据Linux下的各种驱动框架进行开发。一定要满足框架,也就是Linux下各种驱动框架的掌握。3、驱动最终表现就是/dev/xxx文件。打开、关闭、读写、。。。4、现在新的内核支持设备树,这个一个.dts文件,此文件 描述了板子的设备信息。三、Linux驱动开发分类linux驱动分为三大类:1、字符设备驱动,最多的。2、块设备驱动,存储3、原创 2021-04-24 19:00:00 · 134 阅读 · 0 评论 -
字符驱动编写错误
编译自己写的驱动时出现 warning: initialization from incompatible pointer type后来发现是自己复制了read变为write出现问题要看清差异ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);...原创 2021-04-22 20:54:16 · 207 阅读 · 0 评论