
Linux学习
文章平均质量分 91
Linux学习
挥剑决浮云 -
永远和自己的无知作斗争!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux学习知识点总结(更新ing)
这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。BusyBox 是一个轻量级的 Linux 工具箱,它将多个 UNIX/Linux 命令(如 ls、cp、vi、wget)整合成一个可执行文件,适用于嵌入式 Linux 设备(如路由器、IoT 设备、Android、单片机等)例如,它的 ls、cp、vi 等命令都是精简版的,比 GNU 版本更小。常用于调试和查看系统启动信息。原创 2025-02-17 21:02:32 · 705 阅读 · 0 评论 -
Linux驱动层学习:Linux 设备树
到系统主线上的分支。(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等。是一种数据结构,包含多个节点,用于描述硬件设备及其配置信息,它通常用于嵌入式系统中,尤其是在Linux操作系统中,帮助操作系统识别和管理硬件资源,设备树不是代码,而是一种用数据描述硬件信息的方式。原创 2025-02-16 21:43:08 · 1079 阅读 · 0 评论 -
Linux驱动层学习:LED 驱动开发
对于 32 位的处理器来说,虚拟地址范围是 2^32=4GB,我们的开发板上有 512MB 的 DDR3,这 512MB 的内存就是物理内存,经过 MMU 可以将其映射到整个 4GB 的虚拟空间。Linux 内核启动的时候会初始化 MMU,设置好内存映射,设置好以后 CPU 访问的都是虚拟地址。物理内存只有 512MB,虚拟内存有 4GB,那么肯定存在多个虚拟地址映射到同一个物理地址上去,虚拟地址范围比物理地址范围大的问题处理器会处理。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。原创 2025-02-14 22:14:51 · 511 阅读 · 0 评论 -
IMX6ULL使用遇到的问题和解答更新
所以使用命令 setenv 修改的是 DRAM 中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash中,否则的话 uboot 下一次重启会继续使用以前的环境变量值。按文档设置的 IP 地址,以及设置虚拟机双网卡,网卡1桥接模式是为了配置给开发板,网卡2用NET模式是为了给Windows主机上网。经过查找,在一篇博客讲到,把网线插到开发板的ENET2,不是插ENET1,结果可以Ping通。设置完后发现只有Ubuntu可以上网,Ping百度,对于主机和开发板均无法连通。原创 2025-02-06 17:30:10 · 541 阅读 · 0 评论 -
Linux内核是什么
充当硬件设备与操作系统之间的桥梁,为不同的硬件设备(如显卡、声卡、硬盘、网卡等)提供对应的驱动程序,使得操作系统能够识别并控制这些设备。是一种将操作系统的核心功能尽量精简,将只保留基本的、最核心的功能在内核中,其余的系统服务(如设备驱动、文件系统、网络栈等)则在用户空间中运行,并通过消息传递的方式与内核进行交互。处理网络协议栈相关的功能,从物理网络接口的数据收发,到 IP 协议、TCP/UDP 协议等网络层和传输层协议的实现,再到应用层网络应用(如浏览器、邮件客户端等)的网络通信支持。原创 2024-12-30 15:28:38 · 757 阅读 · 0 评论 -
Linux驱动层学习:字符设备驱动
板子:IMX6ULL 阿尔法 原子安装部分:· 交叉编译工具链地址:https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/不想去下官方好大的安装包可以直接虚拟机的火狐浏览器里面下,省得ftp再传一次Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC原创 2024-12-23 15:25:43 · 1026 阅读 · 0 评论 -
Linux 网络编程
一般我们在使用的时候都会使用 struct sockaddr_in 结构体,sockaddr_in 和 sockaddr 是并列的结构(占用的空间是一样的),指向 sockaddr_in 的结构体的指针也可以指向 sockaddr 的结构体,并代替它,而且sockaddr_in 结构对用户将更加友好,在使用的时候进行类型转换就可以了。其实就是通常端口号来确定的。经过三次的互相确认,大家就会认为对方对听的到自己说话,才开始接下来的沟通交流,否则,如果不进行确认,那么你在说话的时候,对方不一定能听到你的声音。原创 2024-11-13 11:44:43 · 979 阅读 · 0 评论 -
Linux 高级IO
如果可以执行 I/O 操作时,应在应用程序中对该文件描述符执行 I/O 操作,以清除文件描述符的就绪态,如果不清除就绪态,那么该状态将会一直存在,那么下一次调用 select()时,文件描述符已经处于就绪态了,将直接返回。普通 I/O 方式一般是通过调用 read()和 write()函数来实现对文件的读写,使用 read()和 write()读写文件时,函数经过层层的调用后,才能够最终操作到文件,中间涉及到很多的函数调用过程,数据需要在不同的缓存间倒腾,效率会比较低。原创 2024-11-06 18:49:45 · 718 阅读 · 0 评论 -
Linux 多线程编程
这样,主线程占用互斥锁的时间主要就是数据拷贝和设置g_hasData变量的时间,相比之前直接在获取互斥锁的情况下读取到g_buf,减少了在互斥锁保护下的fgets操作时间(fgets可能会因为等待用户输入而长时间占用互斥锁),所以先输完再说,加大子线程运行几率。但是,接收线程在打印g_buf的时候,主线程也是在运行的,那么,接收线程在打印g_buf的时候如果输入了字符串,可能接收线程打印出来的可能半截老数据,半截新数据。目的是创建一个接收线程,这个接收线程能接收主线程给的数据,主线程从标准输入得到数据。原创 2024-11-01 19:46:34 · 613 阅读 · 0 评论 -
Linux 之 信号概念、进程、进程间通信、线程、线程同步
如果释放互斥锁时有一个以上的线程阻塞,那么这些阻塞的线程会被唤醒,它们都会尝试对互斥锁进行加锁,当有一个线程成功对互斥锁上锁之后,其它线程就不能再次上锁了,只能再次陷入阻塞,等待下一次解锁。事实上,子进程是父进程的一个副本,譬如子进程拷贝了父进程的数据段、堆、栈以及继承了父进程打开的文件描述符,父进程与子进程并不共享这些存储空间,这是子进程对父进程相应部分存储空间的完全复制,执行fork()之后,每个进程均可修改各自的栈数据以及堆段中的变量,而并不影响另一个进程。是一族函数,而不是一个单独的函数。原创 2024-11-01 11:12:48 · 826 阅读 · 0 评论 -
Linux 之 文件属性与目录、字符串处理、系统信息获取
软链接文件与源文件有着不同的inode号,如图 5.7.3所示,所以也就是意味着它们之间有着不同的数据块,但是软链接文件的数据块中存储的是源文件的路径名,链接文件可以通过这个路径找到被链接的源文件,它们之间类似于一种“主从”关系,当源文件被删除之后,软链接文件依然存在,但此时它指向的是一个无效的文件路径,这种链接文件被称为悬空链接,inode节点中记录的链接数并未将软链接计算在内。当进程终止时,内核会将其占用的所有内存都返还给操作系统,这包括在堆内存中由malloc()函数所分配的内存空间。原创 2024-10-26 23:52:53 · 1052 阅读 · 0 评论 -
Linux 之 Linux应用编程概念、文件IO、标准IO
它是一个库函数,在内部会处理很多复杂的操作,如缓冲区管理、格式化输出等,这些操作可能会基于底层的系统调用(如写入到标准输出文件描述符的系统调用),但从应用程序开发者的角度来看,使用cout比直接使用系统调用更加方便、直观。例如,C 标准库中的stdio.h库中的fopen函数,它在内部可能会调用系统调用open来实现文件的打开操作,但fopen提供了更易用的接口,如可以直接使用字符串形式的文件名(不需要像open那样进行一些底层的参数设置),并且可以自动处理一些错误情况。但其底层仍然使用系统调用IO函数。原创 2024-10-08 21:47:07 · 839 阅读 · 0 评论 -
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令。gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩。tar -vcf test.tar test //将test打包成test.tar。Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。/dev/sdb 表示U盘,/dev/sdb1 表示U盘的第一个分区。原创 2024-10-04 22:20:08 · 1328 阅读 · 0 评论