
Linux
文章平均质量分 62
Linux
lljss2020
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
81. 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_SOFTIR原创 2025-04-07 20:29:02 · 337 阅读 · 0 评论 -
80. Linux内核定时器实验
1.1、内核时间管理1、Cortex-M内核使用systick作为系统定时器。2、硬件定时器、软件定时器,原理是依靠系统定时器来驱动。3、linux内核频率可以配置,图形化界面配置。4、重点,HZ表示系统节拍率,1.2、节拍率高低的缺陷1.4、内核定时器1、软件定时器不像硬件定时器一样,直接给周期值。设置期满以后的时间点。2、定时处理函数。3、内核定时器不是周期性的,一次定时时间到了以后就会关闭,除非重新打开。定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。原创 2025-04-02 21:03:25 · 1072 阅读 · 0 评论 -
77. Linux并发与竞争试验
1.1什么是并发与竞争?线程、中断、多核、抢占等。Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单车的原则存在,只怕到时候为了一辆单车要打起来了。原创 2025-04-01 20:21:29 · 689 阅读 · 0 评论 -
76. pinctrl和gpio子系统试验
上一章我们编写了基于设备树的 LED 驱动,但是驱动的本质还是没变,都是配置 LED 灯所使用的 GPIO 寄存器,驱动开发方式和裸机基本没啥区别。Linux 是一个庞大而完善的系统,尤其是驱动框架,像 GPIO 这种最基本的驱动不可能采用“原始”的裸机驱动开发方式,否则就相当于你买了一辆车,结果每天推着车去上班。Linux 内核提供了 pinctrl 和 gpio 子系统用于GPIO 驱动,本章我们就来学习一下如何借助 pinctrl 和 gpio 子系统来简化 GPIO 驱动开发。原创 2025-03-31 21:54:24 · 633 阅读 · 0 评论 -
75. 设备树下的LED驱动试验
在《第四十二章 新字符设备驱动实验》中,我们直接在驱动文件 newchrled.c 中定义有关寄存器物理地址,然后使用 io_remap 函数进行内存映射,得到对应的虚拟地址,最后操作寄存器对应的虚拟地址完成对 GPIO 的初始化。本章我们在第四十二章实验基础上完成,本章我们使用设备树来向 Linux 内核传递相关的寄存器物理地址, Linux 驱动文件使用上一章讲解的 OF函数从设备树中获取所需的属性值,然后使用获取到的属性值来初始化相关的 IO。原创 2025-03-30 22:25:40 · 781 阅读 · 0 评论 -
74. Linux设备树详解
1、uboot启动内核用到zImage,imx6ull-alientek-emmc.dtb。2、设备树:设备和树。设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等。原创 2025-03-30 21:55:04 · 1143 阅读 · 0 评论 -
73. Linux新字符设备驱动实验
经过前两章实验的实战操作,我们已经掌握了 Linux 字符设备驱动开发的基本步骤,字符设备驱动开发重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。udev 是一个用户程序,在 Linux 下通过 udev 来实现设备文件的创建与删除, udev 可以检测系统中硬件设备状态,可以根据系统中硬件设备状态来创建或者删除设备文件。返回值就是创建好的设备。原创 2025-03-30 14:15:14 · 1019 阅读 · 0 评论 -
72. Linux LED灯驱动实验(直接操作寄存器
Linux 内核启动的时候会初始化 MMU,设置好内存映射,设置好以后 CPU 访问的都是虚拟 地 址。比 如 I.MX6ULL 的 GPIO1_IO03 引 脚 的 复 用 寄 存 器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 的地址为 0X020E0068。如果没有开启 MMU 的话直接向 0X020E0068 这个寄存器地址写入数据就可以配置 GPIO1_IO03 的复用功能。现在开启了 MMU,并且设置了内存映射,因此就不能直接向 0X020E0068 这个地址写入数据了。原创 2025-03-29 22:31:04 · 869 阅读 · 0 评论 -
71. 我的第一个Linux驱动实验
字符设备驱动的编写主要就是驱动对应的open、close、read。。。其实就是file_operations结构体的成员变量的实现。其中关于 C 库以及如何通过系统调用“陷入” 到内核空间这个我们不用去管,我们重点关注的是应用程序和具体的驱动,应用程序使用到的函数在具体驱动程序中都有与之对应的函数,比如应用程序中调用了 open 这个函数,那么在驱动程序中也得有一个名为 open 的函数。原创 2025-03-28 21:32:39 · 1010 阅读 · 0 评论 -
70. Linux驱动开发与裸机开发区别,字符设备驱动开发
1、底层,跟寄存器打交道,有些MCU提供了库。原创 2025-03-26 07:14:08 · 428 阅读 · 0 评论 -
64. MfgTool烧写工具详解
1、mfgtool是NXP官方做的向I.MX系列烧写系统的软件,运行在windows下。可以烧写uboot.imx、zImage、dtb,rootfs。通过USB烧写。Mfgtool里面默认存放了NXP官方开发板的系统文件,2、基本原理向开发板烧系统分两部分:1、先向开发板的DDR下载一个Linux系统,2、通过前面下载到DDR中的Linux系统完成最终的烧写工作。原创 2025-03-25 21:32:16 · 747 阅读 · 0 评论 -
63. 根文件系统构建
ld-linux-armhf.so.3 后面有个“->”,表示其是个软连接文件,链接到文件 ld-2.19-2014.08-1-git.so,因为其是一个“快捷方式”,因此大小只有 24B。构建根文件系统,busybox。后面的“-d”表示拷贝符号链接,这里有个比较特殊的库文件: ld-linux-armhf.so.3,此库文件也是个符号链接,相当于 Windows 下的快捷方式。busybox 的工作就完成了,但是此时的根文件系统还不能使用,还需要一些其他的文件,我们继续来完善 rootfs。原创 2025-03-20 22:08:19 · 686 阅读 · 0 评论 -
ubuntu下TFTP服务器搭建
最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp, 如果没有/etc/xinetd.d 目录的话自行。tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令。TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过。和 NFS 一样, TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如。TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。原创 2025-03-18 21:36:50 · 653 阅读 · 0 评论 -
ubuntu开启NFS V2用到的关键端口
NFS V2原创 2025-03-16 20:08:55 · 155 阅读 · 0 评论 -
linux基础命令
【代码】linux基础命令。原创 2025-03-16 10:26:18 · 160 阅读 · 0 评论 -
busybox/busybox-1.29.0# make menuconfig 报错fatal error: curses.h: No such file or directory
【代码】busybox/busybox-1.29.0# make menuconfig 报错fatal error: curses.h: No such file or directory。原创 2025-03-03 21:31:53 · 152 阅读 · 0 评论 -
win10使用haneWIN NFS Server挂载NFS v2服务,u-boot通过NFS下载zImage
【代码】win10使用haneWIN NFS Server挂载NFS v2服务,u-boot通过t通过NFS下载zImage。原创 2025-03-02 20:22:54 · 509 阅读 · 0 评论 -
nano 是 Linux 系统中的一个 命令行文本编辑器
如果对 nano 不熟悉,也可以通过 sudo vim /etc/nfs.conf 或 sudo gedit /etc/nfs.conf(需图形界面)完成编辑。/etc/nfs.conf:要编辑的文件路径(这里是 NFS 服务的配置文件)。sudo:以管理员权限运行命令(编辑系统文件通常需要 root 权限)。gedit:图形界面编辑器(需要桌面环境支持)。适合新手:没有 vi 的模式切换,操作更直观。nano:调用 nano 编辑器。Ctrl + X:退出编辑器。Ctrl + O:保存文件。原创 2025-03-02 14:17:57 · 1243 阅读 · 0 评论 -
windows下搭建tftp服务器+网络启动Linux
在这里插入图片描述](https://i-blog.csdnimg.cn/direct/272f1fcf2fb14673aad0534510402cfb.png。原创 2025-02-09 13:05:52 · 475 阅读 · 0 评论 -
Makefile增加ARCH和CROSS_COMPILE
【代码】Makefile增加ARCH和CROSS_COMPILE。原创 2025-02-07 21:49:57 · 185 阅读 · 0 评论 -
62. Linux内核移植
最终编译出:zImage,和 imx6ull-14x14-evk-emmc.dtb,imx6ull-14x14-evk.dtb。将zImage,和 imx6ull-14x14-evk-emmc.dtb拷贝到tftpboot目录下,然后在uboot中通过tftp服务启动。复制arch/arm/boot/dts/imx6ull-14x14-evk.dts文件为imx6ull-alientek-emmc.dts。复制imx6ull-14x14-evk.dts为imx6ull-my-emmc.dts。原创 2025-02-07 21:34:52 · 900 阅读 · 0 评论 -
61. Linux内核启动流程简介
从arch/arm/kernel/vmlinux.lds分析Linux内核第一行启动代码。找到入口函数是stext,image和zImage是经过压缩的,Linux内核会先进行解压缩,解压缩完成以后就要运行Linux内核。要求:1、MMU关闭2、D cache关闭3、I cache无所谓4、r0 = 0。6、r2=atags 或设备树。原创 2025-02-07 19:57:37 · 322 阅读 · 0 评论 -
60. Linux内核顶层Makefile分析
我们需要zImage文件,但是前面一直说的是生成vmlinux,通过make或make all来编译Linux内核。二、make xxx_defconfig过程。一、Linux顶层Makefile基本流程。四、built-in.o文件编译生成过程。五、make zImage过程。原创 2025-02-06 21:33:25 · 172 阅读 · 0 评论 -
59. Linux内核源码目录分析
vmlinux 是编译出来的最原始的内核文件,是未压缩的,比如正点原子提供的 Linux 源码编译出来的 vmlinux 差不多有 16MB。3、arch/arm/boot/dts这个目录,存放Linux内核所有设备树文件,包括dts编译后对应的.dtb文件。2、arch/arm/boot/ 这个目录,Linux内核编译完成以后,在此目录下生成image,zImage。1、分析Linux内核的时候,最好编译一遍Linux内核,然后将其压缩,拷贝到Windows下。二、Linux内核VScode工程创建。原创 2025-02-06 20:28:14 · 172 阅读 · 0 评论 -
emmc启动
【代码】emmc启动。原创 2025-02-06 18:29:39 · 137 阅读 · 0 评论 -
52. Uboot命令使用
其远没有 MDK、 IAR的一键下载方便,在 Linux 内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这个时候网络调试的优势就显现出来了,可以通过网络将编译好的 linux 镜像和设备树文件下载到 DRAM 中,然后就可以直接运行。addr 是数据读取到 DRAM 中的地址, blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区, cnt 是要读取的块数量(十六进制)。设置环境变量,也可以自定义环境变量,也可以删除环境变量。原创 2025-02-06 18:28:11 · 832 阅读 · 0 评论 -
58. 正点原子官方Linux内核编译与体验
本章的移植我们就使用 NXP 提供的 Linux 源码, NXP 提供 Linux源码已经放到了开发板光盘中,路径为: 1、例程源码-》 4、 NXP 官方原版 Uboot 和 Linux-》linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。先看一下如何编译 Linux 源码,这里编译以 I.MX6U-ALPHA 开发板移植好的 Linux 源码,已经放到了开发板光盘中,路径为: 1、例程源码-》 3、正点原子 Uboot 和 Linux 出厂源码-》原创 2025-02-06 18:14:58 · 451 阅读 · 0 评论 -
57. Uboot图形化界面配置
比如增加了dns功能后,保存配置文件后面make menuconfig,Load 新保存的配置文件。原创 2025-02-06 18:12:19 · 591 阅读 · 0 评论 -
56. Uboot移植实验
首先就是通信效率和速度,一般 SOC 内部的 MAC 是带有一个专用 DMA 的,专门用于处理网络数据包,采用 SRAM 来读写 DM9000 的速度是压根就没法和内部 MAC+外部 PHY 芯片的速度比。从这里也可以看出,三星的 2440、 4412 这些芯片设计之初就不是给工业产品用的,他们是给消费类电子使用的,比如手机、平板等,手机或平板要上网,可以通过 WIFI 或者 4G,我是没有见过哪个手机或者平板上网是要接根网线的。pixclock:像素时钟,每个像素时钟周期的长度,单位为皮秒。原创 2025-02-06 18:10:55 · 637 阅读 · 0 评论 -
55. Uboot启动流程详解
通过函数 initcall_run_list 来运行初始化序列 init_sequence_f 里面的一些列函数, init_sequence_f 里面包含了一系列的初始化函数, init_sequence_f 也是定义在文件common/board_f.c 中,由于 init_sequence_f 的内容比较长,里面有大量的条件编译代码,这里为了缩小篇幅,将条件编译部分删除掉了,去掉条件编译以后的 init_sequence_f 定义如下。必须要将8785dcf8换为重定位后的rel_a地址。原创 2025-02-06 17:59:10 · 1235 阅读 · 0 评论 -
54. Uboot顶层Makefile分析
继续回到示例代码 31.3.9.1 中, 第 249 行定义变量 KCONFIG_CONFIG, uboot 是可以配置的,这里设置配置文件为.config, .config 默认是没有的,需要使用命令“make xxx_defconfig”对 uboot 进行配置,配置完成以后就会在 uboot 根目录下生成.config。默认情况下.config 和xxx_defconfig 内容是一样的,因为.config 就是从 xxx_defconfig 复制过来的。在Makefile里临时增加打印信息。原创 2025-02-06 17:48:45 · 738 阅读 · 0 评论 -
/bin/sh: 1: cc: not found
构建基本包包括gcc、g++、make和编译软件所需的其他工具。原创 2025-02-06 13:58:35 · 287 阅读 · 0 评论 -
53. Uboot命令使用
其远没有 MDK、 IAR的一键下载方便,在 Linux 内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这个时候网络调试的优势就显现出来了,可以通过网络将编译好的 linux 镜像和设备树文件下载到 DRAM 中,然后就可以直接运行。addr 是数据读取到 DRAM 中的地址, blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区, cnt 是要读取的块数量(十六进制)。设置环境变量,也可以自定义环境变量,也可以删除环境变量。原创 2025-02-02 19:32:14 · 828 阅读 · 0 评论 -
WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载
Windows中安装wsl2,wsl2里安装ubuntu。原创 2025-02-02 17:22:17 · 1256 阅读 · 0 评论 -
51. 正点原子官方Uboot编译与体验
在 uboot 中,通过“make xxx_defconfig”来配置 uboot, xxx_defconfig 就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中。2、uboot就是一个bootloader,作用就是用于启动Linux或其他系统。2、SOC厂商会从uboot官网下载某一个版本的uboot,然后在这个版本的uboot上加入相应的SOC以及驱动。3、如果配置过uboot,那么一定要注意shell脚本会清除整个工程,那么配置的文件也会被删除,配置项也会被删除掉。原创 2025-02-01 16:35:27 · 446 阅读 · 0 评论 -
50. 正点原子官方系统镜像烧写实验
1、首先向SD卡(FAT32)烧写一个系统,然后使用SD卡启动,启动以后在Linux中执行烧写到EMMC或NAND中。使用OTG烧写的时候要先把SD卡拔出来,拨码拨到SD卡启动。等USB OTG与电脑连接成功以后就可以再将SD卡插进去了。1、在Windos使用NXP提供的mfgtool来向开发烧写系统。需要用先将开发板的USB_OTG接口连接到电脑上。Mfgtool工具是向板子先下载一个Linux系统,然后通过这个系统来完成烧写工作。,几分钟烧录后,拨码拨到emmc启动。原创 2025-02-01 14:31:32 · 330 阅读 · 0 评论 -
42. PWM背光实验
1、6ULL的PWM是16位计数器,2、有4个16位的FIFO。3、一个12位的分频器4、正点原子LCD屏幕的背光IO连接到了GPIO1_IO08上。GPIO1_IO08可以复用位PWM1_OUT信号。PWM计数器从0X0000开始计数,当计数器的值等于PWMPR+1的时候定时器就会重新开始下一个周期的运行,因此PWMPR寄存器控制着PWM频率。原创 2025-02-01 13:28:15 · 370 阅读 · 0 评论 -
40. SPI实验
1、SPI相比I2C最大的优势有两点:一个是速度快,最高可以大几十M,甚至上百MHz,第二个就是SPI是个全双工。2、SPI接口和I2C一样,一个SPI接口可以连接多个SPI外设,SPI通过CS引脚/数据线,片选引脚来选择和哪个SPI外设通信。SPI通信前先将指定的SPI外设对应的CS引脚拉低来选中此设备。3、ALPHA开发板上通过ECSPI3接口连接了一个6轴传感器,引脚如下:ECSPI3_SCLK : UART2_RXECSPI3_MOSI:UART2_CTSECSPI3_SS0:UART2_原创 2025-02-01 12:27:20 · 955 阅读 · 0 评论 -
39. I2C实验
1、AP3216C是一个三合一的环境光传感器,ALS+PS+IRLED,ALS是环境光,PS是接近传感器,IR是红外LED灯。I2C接口,最高400Kbit/S的频率。2、环境光,ALS是16位输出。3、接近传感器PS,10bit输出。IR传感器也是10bit4、AP3216C的从机地址位0X1E。5、0X0A是IR Ddata low。Bit7为0的时候表示IR和PS数据有效,为1的时候IR和PS数据无效。Bit1:0是IR的低2位。原创 2025-02-01 11:20:24 · 992 阅读 · 0 评论 -
38. RTC实验
【代码】38. RTC实验。原创 2025-02-01 10:12:52 · 358 阅读 · 0 评论