LINUX
文章平均质量分 78
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件
与光同程
如果想拥有从未有过的东西,就去做你从未做过的事
展开
-
【BSP开发经验】uboot gpl框架开发经验
U-Boot 的 GPL 隔离是指在 U-Boot 中,将 GPL 认为具有侵权风险的代码与非 GPL 代码分隔开来,以避免 GPL 认为有侵权风险的代码“污染”了非 GPL 代码,从而使得整个 U-Boot 项目遵守 GPL 协议,保障代码的版权和使用权。第 3 行的“.text”是段名(代码段),后面的冒号是语法要求,冒号后面的大括号里面可以填上要链接到“.text”这个段里面的所有文件,“(.text)”中的“”是通配符,表示所有输入文件的.text段都放到“.text”中。链接脚本是文本文件。原创 2023-11-30 15:44:11 · 294 阅读 · 0 评论 -
【网络BSP开发经验】交换芯片驱动开发1(RTL8306MB交换芯片驱动开发)
网络BSP 交换芯片驱动开发原创 2023-03-15 22:34:37 · 5652 阅读 · 2 评论 -
【嵌入式Linux开发学习】基于TFTP的通用代码烧写方式
对于从事嵌入式行业的人来说,进行代码升级一定不会陌生。相对于单片机相对单一的烧写方式,嵌入式Linux开发中的烧写方式就丰富了许多。常见的比如串口烧写,USB烧写(fastboot),sd卡烧写。原创 2022-10-24 23:47:18 · 1124 阅读 · 0 评论 -
【嵌入式Linux开发学习】rootfs通过ramfs挂载技巧
在使用initramfs的过程中我感觉相比于传统的我们直接挂载块设备/dev/mmcblk0 /mmc/sda1 之类的挂载点来看相比于读写块设备 ,读写ram总归是会快很多的,系统性能会有所提高。可以避免一些需要频繁擦写数据的情况对于块设备的消耗,可以提升设备寿命,对于不怎么开关机长期保持上电状态的设备比如交换机,网桥之类尤其如此。原创 2022-10-23 02:22:46 · 1530 阅读 · 0 评论 -
【BSP开发之kernel】Linux启动流程以及编译流程分析
uImage 是老版本 uboot 专用的镜像文件,uImag 是在 zImage 前面加了一个长度为 64。展开就是 @ make -f ./scripts/Makefile.build obj=$@arch/arm/kernel/vmlinux.lds 就是整个 Linux 的链接脚本。字节的“头”,这个头信息描述了该镜像文件的类型、加载位置、生成时间、大小等信息。用 objcopy 取消掉 vmlinux 中的一些其他信息。zImage 是经过 gzip 压缩后的 Image。...原创 2022-08-05 22:50:54 · 1039 阅读 · 0 评论 -
【BSP开发学习5】GPIO子系统
gpio_request 函数用于申请一个 GPIO 管脚,在使用一个 GPIO 之前一定要使用 gpio_request。如果不使用某个 GPIO 了,那么就可以调用 gpio_free 函数进行释放。因为权限问题,所以没有办法手动添加设备节点,也没有mdev,udev进行设备节点的管理,可以使用echo 8 > /proc/sys/kernel/printk调整打印等级。此函数用于设置某个 GPIO 的值,此函数是个宏,定义如下。所以需要手动添加设备节点。打印问题,默认打印等级很低。...原创 2022-08-05 22:47:44 · 8059 阅读 · 2 评论 -
【BSP开发学习4】Linux 内核时间管理
Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate)(有的资料也叫系统频率),比如 1000Hz,100Hz 等等说的就是系统节拍率。...原创 2022-08-05 22:46:36 · 740 阅读 · 0 评论 -
【BSP开发学习3】内核并发处理
可能引起Linux 内存混乱的原因。原创 2022-08-05 22:45:33 · 288 阅读 · 0 评论 -
【BSP开发学习2】平台设备驱动
为什么要使用设备驱动模型我对于Linux 引入设备驱动模型的理解是就在于将一份驱动代码分成两份,一份代码是通用的也就是驱动driver ,令一份代码不是通用的会随着板子CPU的不同,发生改变。通过sys文件系统下面的目录和文件可以清楚的了解到Linux系统中的设备情况和组织关系。sysfs提供一种可以显式描述内核对象,对象属性以及对象关系的方法。树形结构中每一个目录与一个kobject对象相对应,其包含了目录的组织结构和名字等信息。在Linux系统中, kobject结构体是组成设备驱动模型的基本结构原创 2022-08-05 22:44:35 · 2239 阅读 · 0 评论 -
【BSP开发学习1】通用字符设备开发
8 };在 cdev 中有两个重要的成员变量:ops 和 dev,这两个就是字符设备文件操作函数集合file_operations 以及设备号 dev_t。编写字符设备驱动之前需要定义一个 cdev 结构体变量,这个变量就表示一个字符设备。...原创 2022-08-05 22:43:50 · 385 阅读 · 0 评论 -
【Linux开发基础知识】shell语法整理
变量定义 a=1变量引用 $a ${a}在Makefile 中 对于Makefile 变量的引用 使用Makefile 下的方式$(a)对于shell 中的变量使用$${a}数组名=(元素1 元素2 元素3 … 元素n)原创 2022-08-05 22:42:44 · 568 阅读 · 0 评论 -
【Linux开发基础知识】Makefile语法
预定义变量作用$*不包含扩展名的目标文件名称$+所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$(第一个依赖文件的名称。$?所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。$@目标的完整名称。$^所有的依赖文件,以空格分开,不包含重复的依赖文件。如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。endef这里,“run-yacc”是这个命令包的名字,其不要和Makefile中的变量重名。...原创 2022-08-05 22:41:57 · 442 阅读 · 0 评论 -
【LINUX驱动开发】AMG8833红外成像模块在HI3516上的应用
文章目录AMG8833介绍内部框图器件参数点阵的排布顺序原理图内部寄存器1、Power Control寄存器:2、Reset寄存器:4、Interrupt Control寄存器:5、Status寄存器:6、Status Clear寄存器:7、Average寄存器:8、Interrupt Level寄存器:9、Thermistor寄存器:10、Interrupt Table寄存器:11、Temperature寄存器:HI3516驱动开发测试代码最终效果![在这里插入图片描述](https://img-blog原创 2022-01-31 18:58:21 · 2363 阅读 · 0 评论 -
【Linux驱动开发】PS2游戏手柄驱动开发与输入子系统框架
文章目录为什么需要输入子系统框架输入子系统框架驱动层事件处理层注册输入设备函数:注销输入设备函数:驱动实现——初始化(事件支持)驱动实现——报告事件驱动实现——报告结束关于事件报告的实现方法中断实现 常用于实体按键内核定时器实现,用于没有触发信号的输入事件PS2驱动开发硬件原理软件实现为什么需要输入子系统框架我们首先来看字符类驱动框架:1)写file_operations结构体的成员函数: .open()、.read()、.write()2)在入口函数里通过register_chrdev()创建驱动原创 2021-04-12 11:47:31 · 1140 阅读 · 0 评论 -
【Linux系统编程】Linux系统编程学习笔记
文章目录1. (一)系统参数以及选项1.1. getopt()1.2. getopt_long()2. (二)环境管理2.1. extern char **environ;全局变量2.2. getenv获取环境变量的值2.3. setenv设置环境变量的值3. (三)内存管理3.1. 基础理论3.2. 常见类型3.3. 内存分配库函数3.3.1. malloc3.3.2. calloc3.3.3. realloc3.3.4. free3.3.5. memset3.3.6. memcpy3.3.7. 更接近.原创 2021-04-10 23:46:08 · 324 阅读 · 0 评论 -
【LINUX驱动框架学习】Linux GPIO驱动以及底层实现方式
GPIO(通用目的输入/输出端口)是一种灵活的软件控制的数字信号。大多数的嵌入式处理器都引出一组或多组的 GPIO,并且部分普通管脚通过配置可以复用为 GPIO。利用可编程逻辑器件,或总线(如 I 2 C、SPI)转 GPIO 芯片,也可以扩展系统的 GPIO。不管是何种 GPIO,GPIOLIB 为内核和用户层都提供了标准的操作方法。GPIOLIB 的接口十分简洁。在 GPIOLIB,所有的 GPIO 都是用整形的 GPIO 编号标识。只要获得要操作 GPIO 的编号,就可以调用 GPIOLIB原创 2021-04-02 21:32:00 · 4860 阅读 · 0 评论 -
【嵌入式LINUX开发】交叉编译QT4.8.6与tslib1.4到IMX283平台
编译tslib(1)建立工作目录(2)编译安装tslib将下载的tslib源码复制到工作目录,并解压:$ unzip tslib-master.zip$ cd tslib-master(3)编译配置tslib,安装路径可以通过 --prefix 参数设置,这里安装到 /usr/local/tslib:$ ./autogen.sh$ ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host原创 2021-04-02 17:19:52 · 450 阅读 · 0 评论 -
【LINUX工具使用】diff与patch工具使用,软件打补丁,更换动态库
在很久以前就听说过软件打补丁的概念但是一直没有尝试过,这一次就尝试一下。使用的MinGW软件包。文本文件打补丁1.生成两个文件一个是原文件:diff.cHello,This is the first file!一个是新文件:diff1.cHello,This is the second file!2.生成补丁命令diff -Naur diff.c diff1.c > diff.patch3.打补丁patch -p0 diff.c diff.patch打完补丁以后diff.c原创 2021-03-14 13:14:01 · 242 阅读 · 0 评论 -
【ubuntu使用记录】UBUNTU系统报错:The system is running in low-graphics mode 怎么办?
(一)问题介绍这个问题确实是相当的恶心,每次出现这种问题的时候都是毫无征兆,因为这个问题我可能已经换掉了五六次虚拟机,每一次都会相当麻烦,这是一种多么痛苦的领悟。(二)解决问题这个问题解决方法网上真的是鱼龙混杂,什么方法都有,比如显卡问题,还有更新系统的方法,然而我发现这些方法都没什么软用,就在昨天我终于在茫茫人海中找到了那个正确的方法。(1)首先进入命令行鼠标进入系统 使用快捷键 Ctrl+Alt+F1进入用户输入密码然后按照以下代码进行cd /etc/X11sudo cp原创 2020-09-08 21:31:05 · 1576 阅读 · 1 评论 -
【ubuntu使用记录】ubuntu16.04磁盘扩展
硬盘扩容:硬盘容量扩容到 100G主要流程扩展硬盘大小到100G将未分配的80G分配到主分区更新UUID值(一)磁盘扩展关闭虚拟机后鼠标点击硬盘,弹出对话框后,点击扩展,输入扩展后的硬盘大小,我这里扩展到100G(二)使用gparted扩展磁盘1 禁用交换分区打开后,可以看到从20G 扩展到 100G 的 80G 处于未分配状态,现在要做的就是把这80G分配到原有硬盘大小80G的主分区/dev/sda1中要将未分配的部分,分配到主分区/dev/sda1中,未分配和主分区/dev原创 2021-02-03 16:57:51 · 302 阅读 · 0 评论 -
【ubuntu使用记录】ubuntu16.04更换国内源
前言我们在安装ubuntu时,由于ubuntu镜像一般默认自带的都是us的官方源http://us.archive.ubuntu.com,和http://security.ubuntu.com。这些镜像源的地址在中国大多数难以连接,因此需要换国内的源,国内的源有网易源、阿里源、科大源等等。什么是源在Ubuntu下,它相当于软件库,需要什么软件,只要记得正确的软件名就可以用命令安装:sudo apt-get install 软件名例如shu:你要安装gcc软件,那么你就可以再终端中输入sudo ap原创 2021-02-03 16:30:01 · 600 阅读 · 0 评论 -
【ubuntu使用记录】Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
【解决方案】:ps -e | grep apt运行结果3929 ? 00:00:00 apt.systemd.dai5808 ? 00:00:01 aptdroot@ubuntu:/home/swann# kill -9 3929root@ubuntu:/home/swann# kill -9 5808原创 2021-02-03 16:14:08 · 120 阅读 · 0 评论 -
【LINUX网络编程】Socket网络编程实战
网络套接字函数最简单的socket的程序sever#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include ...原创 2020-02-09 19:38:58 · 488 阅读 · 0 评论 -
【LINUX网络编程】LINUX Socket编程基础
Socket编程基础知识套接字概念Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递...原创 2020-02-07 16:51:02 · 391 阅读 · 0 评论 -
【LINUX网络编程】网络协议基础
常见网络模型OSI七层模型OSI模型物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测...原创 2020-02-07 16:28:03 · 452 阅读 · 0 评论 -
【LINUX驱动】标准字符类设备学习(使用IMX283平台完成按键中断控制LED灯)
(一)背景介绍自从开始的一段时间学习4412以后,就没有怎么碰过LINUX驱动了,主要是太过繁琐,想要有所突破难度很大,所以我又转而去学习了JAVA,Android,还有流媒体的相关知识。 但是LINUX驱动始终是避不开的东西。最近要做的项目一定需要自己写一些驱动,只能回头再学习一下了。之前学习的时候,对于驱动是没什么概念的只知道套用那些格式,什么platform_driver ,platform_devices,misc_device,搞得我真的有点懵,但是过了大半年以后我发现,自己又有了一些新的领悟原创 2020-09-21 01:14:23 · 567 阅读 · 0 评论 -
【LINUX驱动学习】按键中断
(一)关于LINUX中的中断中断是一个处理器的稀缺资源,在系统中非常重要,通过中断能够及时高效的响应外部事件,提高系统的响应能力,增加系统吞吐量。在驱动中使用中断,其实比较简单,先申请中断号,并注册一个中断中断处理程序,在中断程序实现对外部事件的处理。(二)在内核态实现按键对于LED灯的控制代码实现#include <linux/init.h>#include <li...原创 2019-09-27 20:27:37 · 341 阅读 · 0 评论 -
【LINUX驱动学习】字符类设备驱动
(一)字符类驱动和杂项驱动的区别回顾一下字符驱动编程的基本过程:(1) 首先需要通过 alloc_chrdev_region()获得设备编号;(2) 然后需要通过 cdev_alloc()申请一个 cdev 结构;(3) 接着需要通过 cdev_init()对申请到的 cdev 进行初始化;(4) 最后才能将申请到的 cdev 通过 cdev_add()往系统添加。这样编写驱动稍微显得...原创 2019-09-27 20:19:15 · 358 阅读 · 0 评论 -
【LINUX驱动学习】杂项字符类设备的注册与使用
对于驱动的学习光看是没有用的,还是得要自己敲一敲代码。杂项设备算是最简单的LINUX驱动那么就从他开始吧。在LINUX中写驱动不同于在单片机中,单片机10-20行可以干好的事情LINUX的驱动可能要写到100-200行,虽然有些麻烦但是也有他的好处。功能的固化可以使你的代码更有价值。其实只要了解大致的框架,真正有用的部分还是单片机里的那一套。实验一:点灯实验之前其实已经点过灯了,但那是用了...原创 2019-09-25 17:39:46 · 350 阅读 · 0 评论 -
【LINUX驱动学习】LINUX驱动理论
其实很早之前就已经学习了杂项设备驱动的编写,但是之前一直觉得模模糊糊,还是有一些不太理解的地方。最近在看完周立功的一本书后有所启发,开始写一些关于驱动的东西。(一)驱动设备分类Linux 系统中的设备可以分为字符设备、块设备和网络设备这 3 类。字符设备:字符设备是能够像字节流一样被访问的设备,当对字符设备发出读写请求,相应的 I/O 操作立即发生。Linux 系统中很多设备都是字符设备,如...原创 2019-09-25 17:21:23 · 275 阅读 · 0 评论 -
【LINUX系统编程】系统延时函数让蜂鸣器放音乐
之前学单片机的时候干过这样一件事,通过PWM波让STM32唱歌通过调节音频和延时来实现,今天刚学了LINUX系统编程正好来演练一下。因为找不到歌谱,所以只能暂时使用CSDN上找到的一个。程序如下,其实和之前基本一样,就是改了一下底层代码。#include <stdio.h>#include <stdlib.h>#include <sys/types.h>...原创 2019-07-24 19:44:26 · 1294 阅读 · 0 评论 -
【嵌入式LINUX系统编程】嵌入式LINUX串口编程
串口编程算是学完了,对于LINUX系统编程我也已经有了一个初步的概念本来以为LINUX没了库函数 得要一个位一个位的去设置和单片机没有库函数一样,现在发现自己错了LINUX作为一个中介,很好的将底层函数与上层系统分割开来,所有的操作都是围绕着文件展开的,在完成驱动的封装后我们所需要做的仅仅就是对于文件的读取与写入。怪不到之前听说LINUX中一切都是文件。观察LINUX的文件进入 dev文件...原创 2019-07-24 19:42:09 · 886 阅读 · 0 评论 -
【LINUX系统编程】嵌入式LINUX系统编程学习手记
一.使用BUSYBOXmake menuconfig 进入BUSYBOX界面make 编译生成2进制文件make install 将2进制文件安装到system文件夹下二.最小系统的其他配置创建dev etc lib mnt proc sys tmp var文件夹etc文件夹eth0-setting:IP MASK GATEWAY DNS MAC修改权限 chmod 755新建In...原创 2019-07-24 19:40:54 · 389 阅读 · 0 评论 -
【LINUX入门学习】LINUX常用命令行及VIM文本编辑器的使用总结
明天开始就要正式学习LINUX了,先预习一下基本的命令LINUX常用命令行以及VIM编辑器使用方法1.进入命令行:“Ctrl”+“Alt”+“t”2.退出命令行:“Ctrl”+“d”3.启用ROOT:su root4.显示文件目录:ls [选项] [路径]显示指定工作目录下的内容-a 显示所有文件以及目录。-l 列出文件名称外,还将文件形态、权限、拥有者、文件大小等详细信息列出。5...原创 2019-07-22 21:55:58 · 393 阅读 · 2 评论