嵌入式linux
文章平均质量分 53
王者级废铁
博客就是备忘录,这里主要记录一些学习的内容或者总结
展开
-
有人物联的串口服务器USR-TCP232-410S基本测试通信和使用方案(485串口和232串口)
1.将 410S(USR-TCP232-410S,简称 410S 下同)的串口通过串口线(或USB 转串口线)与计算机相连接,通过网线将 410S 的网口 PC 的网口相连接,检测硬件连接无错误后,接入我们配送的电源适配器,给 410S 供电。这里使用的485通信,那么就要配置波特率为115200,网络中的服务器IP为192.168.0.7(默认),端口一定要设置为26(前面网页设置的)点击“搜索设备”当搜索列表中出现410S的设备后,单击搜索到的设备,查看其配置信息(上图为默认配置信息)。原创 2024-06-28 10:59:00 · 748 阅读 · 0 评论 -
linux开发之设备树八、在驱动中使用of操作函数获取设备树节点中的信息
原创 2024-06-05 17:23:10 · 134 阅读 · 0 评论 -
linux开发之设备树七、设备树下platform_device和platform_driver匹配
device和driver会通过名字进行匹配,匹配成功以后,会执行driver中的probe函数,在这个probe函数中就可以实现去device中取出硬件信息的方法了。设备树替换掉了device部分,也就是设备树也会被转换为platform_device,然后就会通过名字匹配driver,匹配成功后就是调用driver中的probe函数了,然后就是获取硬件信息。原创 2024-05-30 16:59:52 · 227 阅读 · 0 评论 -
linux开发之设备树六、linux下pinctrl子系统管理设置pin管脚的复用功能(一般原厂提供)
客户端的编写格式是固定的,不管哪家原厂的处理器,格式都是一样的对于服务端部分是原厂提供,各个芯片肯定就不一样了,主要在于编写的格式不同。原创 2024-05-30 10:53:40 · 225 阅读 · 0 评论 -
linux开发之设备树五、设备树描述中断实践
首先添加compatible属性:因为设备树替换的是device部分,而在driver部分要有相同名字的去进行匹配,匹配完成后,driver部分需要得到device部分的硬件信息,所以compatible这部分的名字不能随便去写。可以知道后面加入interrupts的时候需要两个参数,这里通过reg也可以知道地址等信息了。中断控制器这种资源一般都是通用的,所以都会放在dtsi文件当中。这里用了ft5x06的触摸芯片,然后I2C的地址为38。这里的引脚为RK_PB5,也可以根据上面的宏定义写13。原创 2024-05-29 14:15:55 · 223 阅读 · 0 评论 -
linux开发之设备树四、设备树中断节点
表示那个引脚作为中断引脚,低电平触发中断,这里有两个值,从上面的#interrupt-cells = ;首先gpio0是一个标签(可以理解为名字),gpio0@fdd60000是这个节点的名称,fdd60000是这个gpio0的寄存器地址,这个只是为了取名字,实际可能没有意义,具体还要看内部其他参数。在节点中出现gpio-controller说明这是一个gpio控制器,出现interrupt-controller代表这是一个中断控制器,同时出现是因为gpio引脚也可以作为中断使用。原创 2024-05-29 10:27:54 · 429 阅读 · 0 评论 -
linux开发之设备树三、基本语法二
上面的mmc0就是sdmmc0节点的别名这部分自定义,比如定义管脚标号,初始数值等为什么我们可以在设备树上自己定义属性呢?设备树文件描述的是硬件信息,具体这个硬件信息有什么用,如何用是由驱动决定的,设备树也是基于平台总线模型(platform总线模型),当驱动部分拿到了设备树的硬件信息以后,比如驱动在设备树属性中拿到了pinnum这个属性,也就是知道了芯片gpio管脚的信息,0-1-2-3-4等5个管脚标号,可以用也可以不用,但是驱动已经获取到了。原创 2024-05-28 17:13:01 · 169 阅读 · 0 评论 -
linux开发之设备树二、基本语法一
compatible属性定义了这么一个名字是led,在驱动中有一个led名字的驱动,就可以匹配成功,然后就会调用驱动的probe函数,然后再probe中获取reg的参数,就可以知道寄存器地址和长度了。gpio@22020101是这里的名字,也就是要用这个gpio,@符号后面的一串数字使用了这个gpio的寄存器地址,因为可能会用很多gpio,所以加入寄存器地址进行区分。实际就是描述在下面的子节点中的reg信息中地址的个数和长度的个数。就是寄存器的地址加寄存器的长度。包含子节点以及子子节点。原创 2024-05-28 14:22:57 · 234 阅读 · 0 评论 -
linux开发之设备树一、设备树基本概念
比如有两个开发板,都是用相同的芯片RK3568,虽然这两个板子不一样,但是芯片相同,所以会有很多相同的地方,这些相同的地方就由dtsi去描述,也就是dtsi描述芯片的东西,dts描述外设。dtsi:device tree source include的缩写 //通用的设备树源码。dtb:device tree blob的缩写//编译设备树源码得到的文件。dts:device tree source的缩写 //设备树源码。DT:Device Tree //设备树。原创 2024-05-28 11:06:14 · 455 阅读 · 0 评论 -
嵌入式Linux开发如何查看应用所链接的动态库
桌面linux的使用方法不赘述,网上资料有很多,对于嵌入式linux开发中,我们在ubuntu中使用ldd 是不行的。在开发中我们常常需要查看一个应用究竟链接了哪些对应的动态库。原创 2024-05-08 14:38:49 · 136 阅读 · 0 评论 -
编译linux开发板的第 1 个驱动实验
为什么编译驱动程序之前要先编译内核?⚫ 驱动程序要用到内核文件:比如驱动程序中这样包含头文件:#include ,其中的 asm 是一个链接文件,指向 asm-arm 或 asm-mips,这需要先配置、编译内核才会生成asm 这个链接文件。⚫ 编译驱动时用的内核、开发板上运行到内核,要一致:开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译的,这两个内核不一致时会导致一些问题。转载 2024-04-29 11:00:07 · 45 阅读 · 0 评论 -
ubuntu配置VMware 使用双网卡之NAT 网卡上网、桥接网络连接开发板
配置 VMware 使用双网卡VMWare 设置为使用双网卡是最方便的:NAT 网卡:Ubuntu 通过它上网,只要 Windows 能上网,Ubuntu 就能上网桥接网卡:Ubuntu 通过它跟开发板联通NAT,Network Address Translation,指网络地址转换。使用 NAT 网卡时,Ubuntu 要访问外网,是委托 Windows 发出数据包,Windows 接收到回应后再转发给 Ubuntu。外界看到的都是 Windows,看不到 Ubuntu。转载 2024-04-29 10:07:22 · 942 阅读 · 0 评论 -
linux下服务器并发
如果需要和发起新的连接请求的客户端建立连接,那么就必须在服务器端通过一个循环调用accept()函数,另外已经和服务器建立连接的客户端需要和服务器通信,发送数据时的阻塞可以忽略,当接收不到数据时程序也会被阻塞,这时候就会非常矛盾,被accept()阻塞就无法通信,被read()阻塞就无法和客户端建立新连接。转载 2024-04-07 16:28:07 · 34 阅读 · 0 评论 -
荔枝派nano中编译buildroot中加入Qt和tslib
再次编译buildroot,再编译好的buildroot中会出现output文件夹,然后output文件夹下有target文件夹,这个target文件夹就是将要打包的文件系统,目标目录,没有打包的rootfs包。首先交叉编译想使用版本的Qt源码,还有tslib库,编译好之后。然后将编译好的Qt库和tslib库放入target/opt中。原创 2023-09-26 15:57:46 · 507 阅读 · 0 评论 -
linux下shell编写软件看门狗
首先就是在while中一直检测/app/app/record -qws,每三秒检测一次,当检测到软件进程消失,就会自动重启这个软件。遇到一个问题,就是软件崩溃,可以让软件自动重启,而且数据库必须是软件崩溃之前的。原创 2023-08-12 11:37:39 · 339 阅读 · 0 评论 -
linux查看进程绑定cpu核是否成功
可以看到选项被选中了,然后在键盘按下esc按键退出,此时可以看到P属性了,查看此时进程是否绑定成功cpu核心,P属性代表的就是进程绑定的核心。运行top后,按 " f "键进入top配置界面,然后按上下键选择P选项,此时可以看到P选项前面没有*号,代表没有配置。然后查看是否有P属性,这个属性用来查看进程绑定的cpu核。运行top命令,可以看到进程以及进程cpu占有率。然后点击在键盘按下“d”按键。这里没有看到cpu占用核心。原创 2023-08-11 19:16:06 · 903 阅读 · 0 评论 -
进程绑定中断CPU核和中断号以及设置线程优先级
绑定要使用中断的CPU核,以及终端号。原创 2023-08-11 11:29:32 · 332 阅读 · 0 评论 -
设定嵌入式linux系统的用户名和密码
因为没有设置密码,但是SSH登录时用户名输入root,密码直接敲回车键也就是不输入密码竟然是错误的,于是想到了一个办法,修改板子上root的密码。遇到一个问题,板子上电后,串口可以正常输入命令行,而且不需要密码,用户名就是root。设置密码时直接敲回车键,设置完后重启板子,SSH可以正常连接。原创 2023-08-10 16:31:05 · 832 阅读 · 0 评论 -
linux自启动程序
嵌入式linux下有软件需要自启动,只需要在/etc/init.d/rcS末尾添加所要启动的程序即可,开机就会自动运行。vi /etc/init.d/rcS在文件末尾添加。原创 2023-08-10 16:18:00 · 256 阅读 · 0 评论 -
网络五层传输协议
原创 2023-08-10 16:15:10 · 61 阅读 · 0 评论 -
编译linux驱动的makefile
编译驱动有两种情况,一种是将驱动程序编译成.ko文件,然后在板子上进行insmod安装,这种使用obj-m,另外一种是将驱动编译到内核使用obj-y。原创 2023-08-10 10:11:48 · 279 阅读 · 0 评论 -
交叉编译驱动和应用出现警告提示错误“cc1:all warnings being treated as errors”解决方法
查看资料:linux内核从5.15之后构建将默认启用“-Werror”编译器标记,编译时warning被当作error处理。这两句非常关键,就是为了避免内核继续将警告提示错误导致的编译失败。首先将内核最顶层makefile的“-Werror”全部取消。注意:是全部“-Werror”都要取消,上面的只是简单举例。此外还要在编译驱动的makefile中加入下面两句。下面就是此次编译的makefile。问题找到了就好解决了。原创 2023-08-10 09:15:19 · 4310 阅读 · 0 评论 -
Linux系统下网卡及网卡驱动管理软件--ethtool
源码下载:https://git.kernel.org/pub/scm/network/ethtool/ethtool.git。ethtool允许查询或控制网络驱动程序和硬件设置,尤其是对于有线以太网设备,是用于查询及设置网卡参数的命令。原创 2023-07-22 09:03:55 · 276 阅读 · 0 评论 -
基于嵌入式Qt的输入法syszuxpinyin自动弹出软件盘的问题
原因是控件无法重新获得焦点,只有当它失去焦点的时候才能重新获得焦点,所以你必须先点其他控件让它失去焦点,然后再点它。问题二:在默认情况下能输入完了以后没有点其他控件而再次输入,简单点就是说点第一次的时候可以弹出,第二次的时候不能。问题一:QLineEditt在默认情况下会自动出现焦点,从而导致一进入界面就弹出软键盘。移植好的syszuxpinyin输入法能正常的检测到控件焦点并自动弹出软键盘。但是我们需要点击一下控件它才弹出软键盘。重新获得焦点.在板子上试验过就知道。解决方法:子类化QLineEdit。原创 2023-07-13 14:10:47 · 278 阅读 · 0 评论 -
触摸屏tslib库交叉编译在arm上运行进行屏幕校准测试
在tslib的官方github(下面的网址)上选择一个版本下载即可。然后这个库用在Qt上面,需要和Qt源码编译时一起使用。下载完成后,在ubuntu14.04进行解压。配置交叉编译器工具和tslib的编译输出路径。为配置交叉编译后库和可执行文件输出的路径。为配置使用的交叉编译工具的名字。原创 2023-07-13 09:59:08 · 1613 阅读 · 0 评论 -
交叉编译zip和unzip
选择unzip60.tar.gz或者unzip60.zip都可以,只需要能在linux上解压就可以。修改unzip60/unix/Makefile。修改zip30/unix/Makefile。打开网址下载unzip60.tar.gz。下载完unzip60.tar.gz后解压。上面这个可能失效了,可以使用下面这个。下载unzip60.tar.gz。也可采用下面的方式进行下载。直接在ubuntu安装。原创 2023-07-11 18:39:42 · 575 阅读 · 1 评论 -
sqlite3交叉编译
但是对于嵌入式移植还是使用sqlite-autoconf-3420000.tar.gz自动配置编译成so库来使用比较方便。6、将在 /install 目录下生成的 libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6三个so文件拷贝的,嵌入式开发环境的/lib/目录 或者程序运行依赖的lib目录下即可。说明:CC赋值为嵌入式开发环境所使用的交叉编译工具,–host指定软件运行环境为arm-linux, --prefix指定源码交叉编译后生成文件的路径。原创 2023-07-11 14:24:09 · 1594 阅读 · 0 评论 -
海思如何编译驱动
执行make,若出现下面错误,说明没有make menucofig,需要去内核目录下配置一下。将需要编译的驱动放入SDK目录下的drv/extdrv目录下。下载完对应的内核,根据文档进行打补丁,配置内核,编译内核。这一步在海思的说明文档中有,运行sdk.unpack。进入osdrv/opensource/kernel/配置完内核后,再次编译没有错误,并成功编译出ko。根据里面的说明文档,没有内核就去下载内核,如果。下面是makefile。一、安装海思的SDK。原创 2023-06-14 10:52:13 · 556 阅读 · 0 评论 -
嵌入式linux格式化以及挂载sata或msata
此时可以看到sata的格式为win95 FAT32,这是windows上的一种格式,不适用于linux,所以需要格式化,若不格式化,挂载时就会报错并挂载不上。无奈只能在windows使用diskGenius软件将硬盘格式化为ext4。但是不知道为什么格式化后,硬盘还是显示FAT32的格式。命令查看整体磁盘挂载情况,这时可以看到硬盘已成功挂载。在板子上运行以下linux自带的格式化命令。一、查看嵌入式linux系统上的磁盘空间。命令查看,可以看到硬盘的格式为linux。将硬盘格式化为ext4后。原创 2023-06-09 16:21:16 · 830 阅读 · 0 评论 -
linux下C程序查看内存剩余大小
嵌入式linux中很多内存资源都比较小,所以很多程序中在malloc时就需要提前知道内存剩余的大小。下面是一种调用 sysinfo接口来实现。转载 2023-06-06 18:33:58 · 419 阅读 · 0 评论 -
linux下绑定任务到特定的CPU
如果要设置已存在的线程的亲和性,就可以考虑使用pthread_setaffinity_np,尽管pthread_setaffinity_np是不可移植的,是gnu独有的。与使用sched_setaffinity设置线程亲和性相比,使用pthread_setaffinity_np的另一个好处就是,可以在线程外设置任一线程的亲和性(只要知道pthread_t即可),而sched_setaffinity的gettid,需要在线程函数内调用。注:np的意思为不可移植,即在非gnu的系统上,应该是没有这个接口的。转载 2023-06-06 09:44:13 · 1727 阅读 · 0 评论 -
在嵌入式linux板子上搭建NFS服务器
使用portmap+nfs-utils的工具在hi3536的linux系统上搭建nfs服务器,使用VM虚拟机中的ubuntu作为客户端挂载,进行文件的读写。原创 2023-05-31 18:22:00 · 655 阅读 · 0 评论 -
uboot下的mw写内存和md显示内存命令以及nand命令
注意,网络地址环境变量的设置要根据自己的实际情况,确保主机和开发板的 IP地址在同一个网段内,比如我现在的开发板和电脑都在 192.168.0.1 这个网段内,所以设置开发板的 IP 地址为 192.168.0.10,我的 windows的 主机的地址为 192.168.0.40,因此 serverip 就是192.168.0.40。b\w\l的意思同上,address是要写入内存的地址,value是要写入的值,count是从address开始要写入多少个数,这些都是16进制数。原创 2023-05-31 13:47:50 · 2175 阅读 · 0 评论 -
makefile详解
一、makefile概念作用:假如有三个C文件,比如说有foo.c, bar.c, main.c三个C文件,要编译成一个app,会怎么做呢?先将三个C文件都编译出来,然后再链接成一个可执行文件,但是当文件特别多的情况下,一个一个去编译,然后再去链接起来吗?这时可能会想创建一个shell文件,将上面的步骤放进去,写成一个build.sh,每次编译你只要执行这个脚本问题就解决了。转载 2023-05-30 14:06:56 · 5484 阅读 · 0 评论 -
linux驱动和应用的数据交互ioctl函数和copy_from_user、copy_to_user
驱动程序运行在内核空间中,给出的地址也是在内核空间中的地址,运行在用户空间下的用户程序即使拿到这个地址,也不能访问内核空间。除此之外,还有put_user()函数和get_usr()函数,在用户层和内核层拷贝单个数据时,比如某个int型变量,则优先使用put_user()和get_user()函数;(2)在拷贝大量数据时使用copy_to_user()和copy_from_user()函数,拷贝单个数据时,比如某个int型变量,则优先使用put_user()和get_user()函数;原创 2023-05-29 16:54:57 · 2425 阅读 · 2 评论 -
“echo >”和“echo >>”的区别
将字符串输出重定向,当前目录没有tmp.txt,则创建tmp.txt,并将字符串输出到tmp.txt文件中。将字符串输出追加重定向,当前目录存在tmp.txt,则将tmp.txt的内容后面追加输出的字符串。将字符串输出重定向, 当前目录存在tmp.txt,则将tmp.txt内容替换成输出的字符串。tmp.txt内容:hello B hello C。“echo >”和“echo >>”的区别。命令“echo >>”输出追加重定向。tmp.txt内容:hello A。tmp.txt内容:hello B。原创 2023-04-27 11:04:40 · 1584 阅读 · 1 评论 -
使用tftp嵌入式linux板子和windows互传文件
安装软件后,将Current Directory选择为windows目前将要传递以及下载存放文件的位置,IP选择和板子能够通信的IP地址。首先在windows搭建tftp服务器,下载并安装tftpd32或tftpd64软件。-r 表示远程主机的文件名 (remote file)-l 表示本地文件名 (local file)-g 表示下载文件 (get)-p 表示上传文件 (put)下面就是如何进行传递文件。原创 2023-02-09 17:47:00 · 1143 阅读 · 0 评论 -
linux下设置环境变量并生效的命令操作
将飞腾64核交叉编译链的SDK的压缩包放到/opt目录下,然后解压。然后将这个工具链的路径写到环境变量中。找到交叉编译链所在的路径。这里以配置交叉环境为例。原创 2023-04-27 09:51:40 · 440 阅读 · 1 评论 -
linux下socket编程处理TCP粘包
关于数据包的包头大小可以根据自己的实际需求进行设定,这里没有啥特殊需求,因此规定包头的固定大小为4个字节,用于存储当前数据块的总字节数。这样,在进行套接字通信的时候通过调用封装的 sendMsg() 和 recvMsg() 就可以发送和接收带数据头的数据包了,而且完美地解决了粘包的问题。1、首先接收 4 字节数据,并将其从网络字节序转换为主机字节序,这样就得到了即将要接收的数据的总长度。3、将待发送的数据拷贝到包头后边的地址空间中,将完整的数据包发送出去(字符串没有字节序问题)5、释放存储数据的堆内存。转载 2023-04-18 17:46:55 · 206 阅读 · 0 评论 -
Linux下SOCKET编程
协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。监听套接字: 监听套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,是服务器开始调用socket()函数生成的,称为监听socket描述字(监听套接字)原创 2023-04-18 15:34:25 · 2723 阅读 · 0 评论