自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 基于全志F133-A使用adb调试

路径:tina-d1-h\target\allwinner\d1s-nezha\busybox-init-base-files\etc\init.d\rc.final。路径:f133-a\tina-d1-h\device\config\chips\d1s\configs\nezha\board.dts。2)运行telnetd之后,需要设置以下密码,由于root没有设置密码,无法登录,如下设置;3)修改内核启动后设置usb0为从模式。这里使用了F133的USB0。2)修改usb相关配置。

2023-03-22 13:58:22 2400 1

原创 基于嵌入式Linux开发板的bluez的移植

1)编译好buildroot之后,我们会在 outpur/build/ 看到bluez5_utils-5.58这个文件夹,里面有我们需要用到的一些工具,比如:bluetoothd 、bluetoothctl、btmon等工具,后续调试bluez需要用到这些工具。1)首先我们要有buildroot,我这里用了buildroot-2021.05.3,请对应自己的buildroot进行修改。2)配置一下配置文件:defconfig xxx_xxx_spinor (这玩意就是你的配置文件)

2023-02-21 16:14:59 2559

原创 基于全志T133-s3(Tina Linux)移植5寸RGB触摸屏驱动(FT5316)

这里需要一个转接板,不然没办法使用,板子是6pin的触摸接口,显示屏的是10pin的接口。

2022-11-01 11:33:03 3359

原创 基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动

在驱动层,分为三个驱动,分别是framebuffer驱动,display驱动,LCD&HDMI驱动。display驱动是整个显示驱动中的核心驱动模块,所有的接口都由 display 驱动来提供,包括 lcd 的接口。Tina Linux 提供了一套完整的屏幕驱动,支持 RGB,MIPI DSI,eDP,LVDS,E-INK屏幕,也支持低分辨率的 SPI,IIC 屏幕。本文将通过介绍Linux 5.4 两个版本的 Kernel 中的 LCD 驱动,主要讲解配置屏幕驱动的基本方法。

2022-10-31 15:24:09 7931 11

原创 基于全志T133-s3(Tina Linux)移植wifi(rtl8723d)驱动

3)修改 Tina-Linux/target/allwinner/t113-evb1/modules.mk 文件(这里的路径根据自己的找到就行),增加 RTL8723DS 这个 kmod 选项。6)最后,还需要启用自动加载驱动的功能,位于 Tina-Linux/target/allwinner/t113-evb1/busybox-init-base-files/etc/init.d/rc.modules ,别忘了注释不需要的驱动。主要修改的地方是调用Tina平台提供的上下电,扫卡函数,SDIO 驱动等等。

2022-09-20 16:27:56 5773 7

原创 全志Tina Linux 修改串口(UART0->UART1)

全志Tina Linux 修改串口(UART0->UART1)

2022-06-29 16:50:18 3434 2

原创 基于Linux的Buildroot 制作根文件系统(rootfs)

基于Linux的Buildroot 制作根文件系统(rootfs)1.需要条件2.安装交叉编译链3.下载Buildroot代码包4.开始buildroot 制作根文件系统5.配置文件系统 menuconfig5.1、Target options —> 配置说明5.2.Build options —> 配置说明5.3.Toolchain —> 配置说明5.4.System configuration —> 配置说明5.5Kernel —> 配置说明5.6.Target packa

2022-03-31 17:31:11 7586 1

原创 基于NanoPi3(三星S5P6818)的kernel移植(二)

基于NanoPi3(三星S5P6818)的kernel移植(二)1.安装交叉编译器2.获取源代码3.编译kernel说明1:在编译过程中,有可能遇到一些报错,大概率是缺少了一些链接库,需要根据对应的错误进行安装。说明2:当前内核(kernel)移植相对简单,由于使用了配置好的.config文件,以及设备树(dtb),同时还有分区挂载之类的内容都是省略掉了,如需要深入学习,可自行专研,此文章不再过多分析。1.安装交叉编译器1)新建文件夹, 并进入nanopi3目录。mkdir nanopi3cd

2022-03-21 09:54:50 933 1

原创 基于NanoPi3(三星S5P6818)的u-boot移植(一)

基于NanoPi3(三星S5P6818)的u-boot移植(一)1.安装交叉编译链2.编译 u-boot3.开始编译说明:在编译过程中,有可能遇到一些报错,大概率是缺少了一些链接库,需要根据对应的错误进行安装。1.安装交叉编译链1)新建文件夹, 并进入nanopi3目录。mkdir nanopi3cd nanopi32)下载aarch64-linux-gcc 6.4交叉编译器git clone https://github.com/friendlyarm/prebuilts.git -b m

2022-03-17 14:31:00 1898

原创 基于荔枝派Lichee Nano(全志f1c100s)的Nor Flash烧录程序教程(四)

基于荔枝派Lichee Nano(全志f1c100s)的Nor Flash烧录程序教程(四)1.MBR分区表2.安装下载工具 sunxi-tools3.烧录3.1烧录前说明:3.2.烧录u-boot3.3.烧录kernel3.4.烧录dtb3.5.烧录rootfs3.5.烧录userfs1.MBR分区表-----------------------------------------------------------MBR分区表-------------------------------------

2022-03-11 10:32:28 3619

原创 基于荔枝派Lichee Nano(全志f1c100s)的rootfs移植(三)

基于荔枝派Lichee Nano(全志f1c100s)的rootfs移植(三)1.下载Buildroot代码包2.解压文件,获得源代码3.配置Buildroot4.编译5.生成rootfs.img镜像文件。6.mtd-utils安装1.下载Buildroot代码包1)在 https://buildroot.org/download.html 链接可以下载到最新的代码包。2.解压文件,获得源代码1)使用命令解压。tar -xzvf buildroot-2021.02.6.tar.gz 3.

2022-03-10 14:29:19 1248

原创 基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二)

基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二)1.获取源代码2.linux内核修改dts设备树文件3.内核配置修改3.1.使用命令进入配置界面:make ARCH=arm menuconfig3.2.支持jffs2文件系统3.3.支持MTD设备4.添加flash型号支持4.1修改源码下的 ./drivers/mtd/spi-nor/spi-nor.c,增加xt25f128b型号。5.编译1.获取源代码1.下载默认带480*272LCD的版本:git clone --dep

2022-03-10 11:15:46 2469 2

原创 基于荔枝派Lichee Nano(全志f1c100s)的u-boot移植(一)

基于荔枝派Lichee Nano(全志f1c100s)的u-boot移植(一)

2022-03-10 11:08:30 2289

原创 基于STM32+MQTT连接阿里云获取网络时间

基于STM32+MQTT连接阿里云获取网络时间1.流程说明2.流程分析2.1.连接路由器2.2.连接服务器2.3.订阅NTP 时钟同步响应2.4.发布NTP 时钟同步请求2.5.服务器返回数据2.6.网络时间戳转成北京时间(注意时区:8)3.实物图如下说明:本次从阿里云获取网络时间,是接着上一章的基础上进行的(基于STM32+FreeRtos+DHT12+ESP8266+MQTT连接阿里云(链接: link.))。1.流程说明2.流程分析2.1.连接路由器首先连接路由器(wifi),得到网络状态

2022-02-23 15:30:04 6787 13

原创 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

基于STM32+DHT12+ESP8266+MQTT连接阿里云1.概述2.实现步骤2.1.MQTT.fx模拟器与阿里云通信2.2.STM32与阿里云通信1.概述实现通过stm32f103c8t6+操作系统(freertos)读取dht12温湿度传感器的数据,采用ESP8266连接网络,经过MQTT协议连接阿里云IOT,进行数据的传输,以及服务器发送数据控制LED的亮灭,包括消息的发布和订阅等操作,完成云端和设备端的通讯。2.实现步骤2.1.MQTT.fx模拟器与阿里云通信首先,我们使用MQTT.f

2022-02-20 13:15:18 16562 12

原创 Linux线程间通信之信号量(十九)

Linux线程间通信之信号量(十九)1.信号量2.初始化信号量函数3.信号量减一函数4.尝试对信号量减一函数5.信号量加一函数6.销毁信号量函数7.参考代码1.信号量信号量概述 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。 编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。 PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。 信号量主要用于进程或线

2021-10-04 15:53:15 502 1

原创 Linux线程间通信之信号(十八)

Linux线程间通信之信号(十八)1.1.

2021-10-04 15:44:04 1105

原创 Linux线程间通信之条件变量(十七)

Linux线程间通信之条件变量(十七)1.条件变量2.条件变量初始化函数3.释放条件变量函数4.等待条件函数5.限时等待条件函数6.唤醒等待在条件变量上的线程7.参考代码1.条件变量与互斥锁不同,条件变量是用来等待而不是用来上锁的,条件变量本身不是锁! 条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量的两个动作:(1)条件不满, 阻塞线程 。(2)当条件满足, 通知阻塞的线程开始工作 条件变量的类型: pthreadcondt。2.条件变量初始化函数

2021-09-25 21:34:40 809

原创 Linux线程间通信之读写锁(十六)

Linux线程间通信之读写锁(十六)1.读写锁概述2.初始化读写锁函数3.释放读写锁函数4.申请读锁函数5.申请写锁函数6.释放读写锁函数7.参考代码1.读写锁概述当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。 在对数据的读写操作中,更多的是读操作,写

2021-09-25 21:23:50 486 1

原创 Linux线程间通信之互斥锁(十五)

Linux线程间通信之互斥锁(十五)1.同步与互斥概述2.互斥锁2.1.互斥锁初始化函数2.2.销毁互斥锁函数2.3.申请上锁函数2.4.解锁函数3.参考代码1.同步与互斥概述现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某interesting两个问题的。 互斥:是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该

2021-09-25 21:13:51 447

原创 Linux线程之属性(十四)

Linux线程之属性(十四)1.线程属性1.1.主要结构体成员1.2.线程属性初始化注意1.3.初始化线程属性函数1.4.销毁线程属性所占用的资源函数1.5.线程分离状态的函数:设置线程属性1.6.线程分离状态的函数:获取线程属性1.7.设置线程的栈地址1.8.获取线程的栈地址2.参考代码1.线程属性Linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。 如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可

2021-09-20 13:00:31 104

原创 基于Linux利用PPP实现4G模块联网

基于Linux利用PPP实现4G模块联网1.编译ppp2.4.51.1.解压ppp程序包1.2进入并生成Makefile1.3.指定交差编译工具make2.配置Linux内核(开发板使用的内核)3.PPP安装4.脚本配置5. 进行拨号连接1.编译ppp2.4.51.1.解压ppp程序包 tar -xzvf ppp-2.4.5.tar.gz1.2进入并生成Makefile cd ./ppp-2.4.5 ./configure1.3.指定交差编译工具make make CC=arm-linu

2021-09-13 10:39:05 2485 1

原创 基于Ubuntu16.04远程桌面连接(VNC方式)

基于Ubuntu16.04远程桌面连接(VNC方式)1.windos10下安装VNC2.Ubuntu16.04下安装VNC2.1.安装VNC服务2.2.启动vnc服务2.3.增加进程和结束进程2.4.配置图形界面,安装gnome桌面2.5.安装桌面环境3.启动vnc viewer客户端1.windos10下安装VNC可自行下载VNC软件进行安装,安装之后如下。2.Ubuntu16.04下安装VNC2.1.安装VNC服务进入root超级权限下,使用命令。 apt-get install vnc4

2021-09-12 14:53:18 3395

原创 Linux线程之取消(十三)

Linux线程之取消(十三)1.线程取消2.参考代码1.线程取消 int pthread_cancel(pthread_t thread);功能:杀死(取消)线程。参数:thread : 目标线程ID。返回值:成功:0失败: 出错编号。注意:线程的取消并不是实时的,而又一定的延时。需要等待线程到达某个取消点(检查点)。 类似于玩游戏存档,必须到达指定的场所(存档点,如:客栈、仓库、城里等)才能存储进度。 杀死线程也不是立刻就能完成,必须要到达取消点。 取消点:是线程检查是否被取消,并

2021-09-11 21:23:42 491 1

原创 Linux线程之退出(十二)

Linux线程之退出(十二)1.线程的退出2.参考代码1.线程的退出进程中我们可以调用exit函数或exit函数来结束进程,在一个线程中我们可以通过以下三种在不终止整个进程的情况下停止它的控制流。 线程从执行函数中返回。 线程调用pthreadexit退出线程。 线程可以被同一进程中的其它线程取消。 void pthread_exit(void *retval);功能:退出调用线程。一个进程中的多个线程是共享该进程的数据段,因此,通常线程退出后所占用的资源并不会释放。参数:retval:存储

2021-09-11 20:57:27 1713

原创 Linux线程之回收资源(十一)

Linux线程之回收资源(十一)1.线程的创建2.参考代码1.线程的创建 int pthread_join(pthread_t thread, void **retval);功能:等待线程结束(此函数会阻塞),并回收线程资源,类似进程的 wait() 函数。如果线程已经结束,那么该函数会立即返回。参数:thread:被等待的线程号。retval:用来存储线程退出状态的指针的地址。返回值:成功:0失败: 非02.参考代码/*******************************

2021-09-11 16:44:13 418

原创 Linux线程之创建(十)

Linux线程之创建(十)1.线程的创建2.参考代码1.线程的创建 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg );功能:创建一个线程。参数:thread:线程标识符地址。attr:线程属性结构体地址,通常设置为 NULL。start_routine:线程函数的入口地址。arg:传给线程函数的参数。返回值:成功:0失

2021-09-11 16:39:08 333

原创 Linux多任务编程之线程(九)

Linux多任务编程之线程(九)1.线程概述2.线程函数列表安装3.线程的特点4.线程共享资源5.线程非共享资源6.线程的优缺点7.线程号7.1获取线程号函数1.线程概述在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。 所以,线程是轻量级的进程(LWP:light weight process),在Linux环境下线程的本质仍是进程。 为了让进程完成一定的工作,进程必须至少包含一个线程。进程,直观点说,保存在硬

2021-09-11 16:33:54 690

原创 Linux进程间通信之信号(八)

Linux进程间通信之信号1.信号概述1.1.信号的概念1.2.信号的特点1.3.信号的编号1.4.信号的四要素2.信号的产生与动作3.未决信号集合信号阻塞集4.发送信号API4.1.kill函数4.1.1.参考代码4.2.raise函数4.3.abort函数4.4.alarm函数(闹钟)4.4.1参考代码4.5.setitimer函数(闹钟)4.5.1参考代码5.修改信号的处理动作5.1.信号处理方式5.2.signal函数6.信号集6.1.信号集概述6.2.自定义信号集函数6.3.sigprocmask

2021-08-29 22:03:17 786

原创 Linux进程间通信之共享内存(七)

Linux进程间通信之共享内存(七)1.共享内存原理1.1.共享内存示意图:2.共享内存的创建和使用2.1获得一个共享存储标识符2.2.共享区映射2.3.解除共享映射区2.4.共享内存控制3.参考代码3.1.共享内存读操作3.2.共享内存写操作3.3..共享内存头文件1.共享内存原理共享内存允许两个或者多个进程共享给定的存储区域。 共享内存的特点 1、共享内存是进程间共享数据的一种最快的方法。一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。 2、使用共享内存要注意

2021-08-11 22:35:52 691

原创 Linux进程间通信之mmap(六)

Linux进程间通信之mmap(六)1.mmap原理2.Mmap映射3.mmap使用3.1.建立映射区3.2.建立映射区4.参考代码4.1.使用共享内存映射实现两个进程之间的通信4.2.通过匿名映射实现父子进程通信4.3.通过共享内存映射的方式修改文件1.mmap原理存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和w

2021-08-08 22:39:49 435

原创 Linux进程间通信之消息队列(五)

Linux进程间通信之消息队列(五)1.消息队列概述2.消息队列标识符获取3.消息队列创建和使用4.消息队列的消息的格式5.发送消息6.接收消息6.消息队列的控制7.利用消息队列通信7.1.参考代码(接收)7.2.参考代码(发送)1.消息队列概述消息队列是消息的链表,存放在内存中,由内核维护 消息队列的特点1、消息队列中的消息是有类型的。2、消息队列中的消息是有格式的。3、消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。4、消息队列允许一个或多个进程

2021-07-31 20:43:00 422

原创 Linux进程间通信之有名管道(四)

Linux进程间通信之有名管道(四)1.有名管道的特点2.有名管道创建和使用3.有名管道读写的特点4.客户端与服务器通信4.1.参考代码(客户端)4.2.参考代码(服务器)1.有名管道的特点命名管道(FIFO)和管道(pipe)基本相同,但也有一些显著的不同,其特点是:1、半双工,数据在同一时刻只能在一个方向上流动。2、写入FIFO中的数据遵循先入先出的规则。3、FIFO所传送的数据是无格式的,这要求FIFO的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。4、FIFO在文件系统

2021-07-31 20:27:35 408

原创 Linux进程间通信之无名管道(三)

Linux进程间通信之无名管道(三)1.无名管道概述2.无名管道创建和使用3.无名管道读写的特点4.参考代码5.建立管道和创建父子进程间的通信5.1.参考代码5.2.参考代码1.无名管道概述管道(pipe)又称无名管道。 无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。管道是最古老的UNIX IPC方式,其特点是: 1、半双工,数据在同一时刻只能在一个方向上流动。 2、数据只能从管道的一端写入,从另一端读出。 3、写入管道中的数据遵循先入先出的规则。 4、管道所传送的数据是无格式的

2021-07-31 20:12:42 416

原创 Linux多任务编程之进程(二)

Linux多任务编程之进程(二)1.进程概念1.1单道、多道程序设计(了解)1.2.并行和并发(理解)1.3.进程控制块PCB(了解)2.进程的状态3.进程号3.1.getpid函数3.2.getppid函数3.3.getpgid函数3.2.参考代码4.fork创建进程4.1.fork出来的子进程和父进程之间的关系4.2.参考代码5.回收子进程资源5.1.wait函数5.2.waitpid函数6.僵尸进程孤儿进程守护进程6.1.僵尸进程6.2.孤儿进程6.3.守护进程7. vfork创建进程7.1参考代码8

2021-07-29 10:57:25 863 1

原创 Linux文件IO操作之IO编程(一)

Linux系统编程之IO编程1.文件IO(非缓冲文件系统)1.1打开文件open1.2.关闭文件close1.3.向文件写数据write1.4.从文件读数据read1.5.参考代码2.文件IO(缓冲文件系统)1.文件IO(非缓冲文件系统)1.1打开文件openint open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);功能:打开文件,如果文件不存在则可以选择创建

2021-07-26 14:08:05 1744 1

原创 Linux dmesg命令

Linux dmesg命令Linux dmesg命令用于显示开机信息。Linux dmesg命令用于显示开机信息。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。语法: dmesg [-cn][-s <缓冲区大小>]参数说明: -c  显示信息后,清除ring buffer中的内容。 -s<缓冲区大小>  预设置为8196,刚好等于ring b

2021-07-22 11:34:19 275

原创 ubuntu下设置vim配置

ubuntu下设置vim配置1.使用安装指令: sudo apt-get install vim2.修改配置命令,修改该文件对所有用户都生效。3. 添加一下内容1.使用安装指令: sudo apt-get install vim2.修改配置命令,修改该文件对所有用户都生效。sudo vim /etc/vim/vimrc3. 添加一下内容set ai "自动缩进,新行与前面的行保持—致的自动空格set aw

2021-07-18 20:12:14 179 2

原创 如何把uboot从SD卡烧到emmc

如何把uboot从SD卡烧到emmc1.切换存储设备2.启动网卡(可忽略)3.设置TFTP所需的IP地址4.获取文件(u-boot.bin)5.换到EMMC分区1,使用命令:6.写入数据到emmc中7.切换到emmc模式,重启即可。说明:需要uboot下支持mmc命令才可以进行操作。1.切换存储设备mmc info 显示存储设备的信息,在切换到emmc设备下(执行mmc dev 0 这里的0要看具体的设备信息才能确定),执行mmcinfo可看到存储设备各属性信息。2.启动网卡(可忽略)由于

2021-07-18 20:09:14 2687

原创 Linux ftpget和ftpput命令

Linux ftpget和ftpput命令1.FTP上传文件到服务器 与 从服务器中下载文件2.不带用户名获取与下载文件1.FTP上传文件到服务器 与 从服务器中下载文件从FTP服务器上下载文件:ftpget -u username -p passwd -P port IP source target从本地上传文件到FTP服务器:ftpput -u username -p passwd -P port IP target source2.不带用户名获取与下载文件//--------

2021-07-18 19:58:38 11607

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除