
嵌入式Linux
文章平均质量分 67
qlexcel
万物皆为比特
展开
-
VirtualBox 共享文件夹设置
就可以把windows中的E:\share文件夹挂在为ubuntu中的share_dir文件夹,两个文件夹可以互通文件了。在ubuntu中执行。新建文件夹,然后挂载。原创 2023-01-04 14:58:09 · 2016 阅读 · 1 评论 -
NanoPi NEO Air使用十六:使用python做开发
准备工作更改python指令默认版本因为ubuntu是默认安装 python 2.7 和 python 3.5 双版本的,输入指令 python 进入的是 python2.7,输入python3才是进入3.5,考虑到平时和未来都是用python3以上版本,所以可以通过一下两条指令使 python 指令优先进入3.5:sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-al原创 2022-01-09 11:21:51 · 1021 阅读 · 0 评论 -
sys.stderr.write(f“ERROR: {exc}“) SyntaxError: invalid syntax错误
ubuntu 安装pip3后查询其版本出现错误Traceback (most recent call last): File "/usr/local/bin/pip3", line 7, in <module> from pip._internal.cli.main import main File "/usr/local/lib/python3.5/dist-packages/pip/_internal/cli/main.py", line 57 sys.stderr原创 2022-01-09 11:16:59 · 2687 阅读 · 2 评论 -
全志H3 uboot传参到内核分析,boot.scr文件分析
传参过程uboot倒计时结束,默认以bootcmd来启动内核,它等于fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr}上面两个语句的含义是:从mmc 0设备的第一个分区加载boot.scr文件到scriptaddr地址,然后执行boot.scr脚本。查看mmc 0:1中的文件,的确有boot.scr:在uboot源码中搜索scriptaddr,发现它定义在include/configs/sunxi-common.h它原创 2022-01-08 11:49:32 · 3575 阅读 · 0 评论 -
bootcmd 和 bootargs 环境变量
内容来自《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》uboot 中有两个非常重要的环境变量 bootcmd 和 bootargs,接下来看一下这两个环境变量。bootcmd 和 bootagrs 是采用类似 shell 脚本语言编写的,里面有很多的变量引用,这些变量其实都 是 环 境 变 量 , 有 很 多 是 NXP 自 己 定 义 的 。 文 件 mx6ull_alientek_emmc.h 中 的 宏CONFIG_EXTRA_ENV_SETTINGS 保存着这些环境原创 2022-01-07 21:43:26 · 2158 阅读 · 0 评论 -
U-Boot的启动信息和命令使用
启动信息1 U-Boot 2016.03-gd3f0479 (Aug 07 2020 - 20:47:37 +0800)2 3 CPU: Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)4 CPU: Industrial temperature grade (-40C to 105C) at 51C5 Reset cause: POR6 Board: I.MX6U ALPHA|MINI7 I2C: ready8 DRAM: 512原创 2022-01-07 21:02:08 · 3155 阅读 · 0 评论 -
NanoPi NEO Air使用十五:使用V4L2驱动USB摄像头
USB摄像头初识 Linux UVC driver(uvc) 该驱动适用于符合USB视频类(USB Video Class)规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁。大多数大容量存储器设备(如优盘)都遵循USB规范,因而仅用一个单一驱动就可以操作它们。与此类似,UVC兼容外设只需要一个通用驱动即可。 USB摄像头大体上可以分为UVC cameras和non-UVC cameras。推荐购买UVC cameras。UVC是一个开放的标准,拥有维护良好的驱动,它属于内核代码的一部分原创 2022-01-05 21:44:10 · 1736 阅读 · 0 评论 -
NanoPi NEO Air使用十四:FrameBuffer的理解和使用
Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。帧缓存有个地址,是在内存里。我们通过不停的向fra原创 2022-01-05 12:46:24 · 528 阅读 · 0 评论 -
NanoPi NEO Air使用十三:使用自带的fbtft驱动点亮SPI接口TFT屏幕,ST7789V,模块加载的方式
上节使用fbtft来驱动SPI接口TFT屏幕,但是是编译进内核的方式。本节再来测试下编译成模块的用法。引脚240x240分辨率,1.3寸,主控为ST7789VW。与开发板的引脚连接确定如下:功能IOGNDPin65VPin2LCD_RESETPin7-PG11LCD_DCPin22-PA1SPICLKPin23-PC2SPIMOSIPin19-PC0从开发板的引脚图发现,开发板使用的SPI0。修改设备树打开/home原创 2022-01-03 23:06:04 · 2983 阅读 · 0 评论 -
NanoPi NEO Air使用十二:使用自带的fbtft驱动点亮SPI接口TFT屏幕,ST7789V
本节为手中的ST7789,分辨率240x240,SPI接口的屏幕移植驱动。从开发板的引脚图发现,开发板使用的SPI0。引脚连接确定如下:功能IOGNDPin65VPin2LED_EN(BLK)Pin11-PA0LCD_RESETPin7-PG11LCD_DCPin22-PA1SPICLKPin23-PC2SPIMOSIPin19-PC0修改设备树在spi0节点下添加 fbtft相关代码,同时disable其他spi0设备原创 2022-01-02 22:29:25 · 3404 阅读 · 0 评论 -
linux开机自动执行命令或自动启动程序(rc.local)
linux开机的最后会执行/etc/rc.local,因此可以在此脚本里面添加shell命令自动执行或者自动启动某个进程。比如自动输出信息:#!/bin/sh -e## rc.local## This script is executed at the end of each multiuser runlevel.# Make sure that the script will "exit 0" on success or any other# value on error.## In原创 2022-01-02 21:53:03 · 3564 阅读 · 0 评论 -
Linux 系统启动过程
在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多;一般就是通电、BIOS、主引导记录、操作系统这四步。所以我们一般认为加载内核是linux启动流程的第一步。第一步、加载内核操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。我们查看一下,/boot 目录下面大概是这样一些文件: $ ls /boot config-3.2.0-3-amd64 config-3.2.0-4-amd64 grub initrd.img-3.2.0-3-amd64 i转载 2022-01-02 21:11:24 · 423 阅读 · 0 评论 -
linux驱动入口函数执行了,probe函数没有执行排查
写了个spi1的驱动函数,insmod后发现没有反应。添加打印信息后,发现执行了驱动入口函数(在入口函数中执行了spi_register_driver),但是probe函数没有执行,检查compatible和设备树是相同的,于是开始排查:1、搜索compatible,看看是否其他驱动或者设备树节点已经使用2、找个相似功能的驱动,看下能否正常probe。我找了个spi0的驱动,发现工作是正常的,于是一点点修改为spi1,当把pinctrl-0 = <&spi0_pins>;改为pi原创 2022-01-02 11:39:03 · 5121 阅读 · 1 评论 -
NanoPi NEO Air使用十五:移植RTL8723BU驱动
NanoPi NEO Air使用一:介绍NanoPi NEO Air使用二:固件烧录NanoPi NEO Air使用三:OverlayFS、CPU温度和频率、wifi、蓝牙、npi-configNanoPi NEO Air使用四:操作GPIONanoPi NEO Air使用五:安装Xfce和xrdp,实现远程访问NanoPi NEO Air使用六:使用摄像头NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码NanoPi NEO Air使用八:编写个简单的驱动和应用程序原创 2021-12-31 11:37:48 · 2187 阅读 · 3 评论 -
linux编译配置过程,make menuconfig/.config/Kconfig的关系
首先要知道,内核配置跟三类文件有关,包括.config,Kconfig,Makefile,其中.config只有根目录下有,Kconfig和Makefile在根目录和每个子目录都有,先说下他们的功能:Kconfig:定义配置项Makefile:说明配置项的编译方法.config:控制配置项编译进内核、编译成模块还是不编译比如我要添加个wifi功能,那么首先要在网络的子目录下的Kconfig里面添加这个wifi功能的描述,添加下面内容:然后再在这个目录下的Makefile文件中添加这个wi原创 2021-12-20 12:22:50 · 2398 阅读 · 0 评论 -
Kconfig语法
# 1、 mainmenu顾名思义 mainmenu 就是主菜单,也就是输入“make menuconfig”以后打开的默认界面,在顶层 Kconfig 中有如下代码:```mainmenu "U-Boot $UBOOTVERSION Configuration"```上述代码就是定义了一个名为“U-Boot $UBOOTVERSION Configuration”的主菜单,其中UBOOTVERSION=2016.03,因此主菜单名为“U-Boot 2016.03 Configuration”,原创 2021-12-20 11:12:03 · 1262 阅读 · 0 评论 -
linux命令总结dd命令详解
一:dd命令dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2参数注释:if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。obs=bytes:一次转载 2021-12-20 10:03:35 · 556 阅读 · 0 评论 -
编译linux内核报错‘make menuconfig‘ requires the ncurses libraries
报错*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make[1]: *** [scripts/kconfig/Makefile:202: scripts/kconfi原创 2021-12-17 19:34:39 · 475 阅读 · 0 评论 -
ubuntu编译linux报错/bin/sh: 1: mkimage: not found
报错 Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready MKIMAGE arch/arm/boot/dts/overlays/sun8i-h3-fixup.scr/bin/sh: 1: mkimage: not foundmake[2]: *** [scripts/Makefile.lib:337: arch/arm/boot/dts/overlays/sun8i-h3-fixup.scr]原创 2021-12-17 11:39:23 · 1697 阅读 · 0 评论 -
awk: line 2: function strtonum never defined错误
编译内核出现错误:regenerate rootfs cpio11282 blocks12029 blocksawk: line 2: function strtonum never definedawk: line 2: function strtonum never defined解决方法:sudo apt-get install gawk原创 2021-12-07 20:17:39 · 1362 阅读 · 0 评论 -
error while loading shared libraries: libz.so.1错误
编译全志linux内核报错 CC scripts/mod/empty.o HOSTCC scripts/genksyms/genksyms.o SHIPPED scripts/genksyms/lex.lex.c HOSTCC scripts/conmakehash HOSTCC scripts/mod/mk_elfconfig HOSTCC scripts/recordmcount SHIPPED scripts/genksyms/keywords.hash.原创 2021-12-07 18:44:05 · 1968 阅读 · 0 评论 -
在Linux里设置环境变量的方法(export PATH)
一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量:1、直接用export命令(推荐)#export PATH=$PATH:/opt/au1200_rm/build_tools/bin查看是否已经设好,可用命令export查看:[root@localhost bin]# export转载 2021-12-07 10:58:00 · 7929 阅读 · 0 评论 -
H3核心板开发笔记(一):编译及烧写方式
系统配置文件路径:tools/pack/chips/sun8iw7p1/configs/dolphin/sys_config.fexlinux 内核: linux-3.4u-boot: brandy/u-boot-2011.09文件系统: buildroot/target/dragonboard/rootfs固件路径: tools/pack编译首次编译,需要导入内核配置,进入 linux3.4 目录,执行:$ cp h3_defconfig .config退回到 lichee 目录,再执行原创 2021-12-07 10:08:55 · 1576 阅读 · 0 评论 -
开启ubuntu的SSH服务,使用终端远程控制
开启 Ubuntu 的 SSH 服务以后我们就可以在 Windwos 下使用终端软件登陆到 Ubuntu,比如使用 SecureCRT, Ubuntu 下使用如下命令开启 SSH 服务:sudo apt-get install openssh-server上述命令安装 ssh 服务, ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即可。...原创 2021-12-06 17:33:21 · 585 阅读 · 0 评论 -
Ubuntu安装FTP 服务, 实现和Windows的文件互传
在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到 Ubuntu 下进行编译。 Windows 和 Ubuntu 下的文件互传我们需要使用 FTP 服务,设置方法如下:1、开启 Ubuntu 下的 FTP 服务打开 Ubuntu 的终端窗口,然后执行如下命令来安装 FTP 服务:sudo apt-get install vsftpd等待软件自动安装,安装完成以后使用 VI 命令打开/etc/vsftpd.co原创 2021-12-06 17:30:31 · 5118 阅读 · 2 评论 -
Linux (Ubuntu)使用vi和vim方向键变成了ABCD
ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决。首先,卸载了原有的vim$ sudo apt-get remove vim-common然后,安装新的vim-full$ sudo apt-get install vim以上命令执行完后即可解决问题。...原创 2021-12-06 17:13:44 · 2531 阅读 · 1 评论 -
解决apt-get /var/lib/dpkg/lock-frontend 问题
运行 apt-get 时报如下错E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?解决方案:执行如下命令sudo rm /var/lib/dpkg/loc转载 2021-12-06 17:12:46 · 272 阅读 · 0 评论 -
MICIN、LINEIN、LINEOUT、HPOUT、麦克风、耳机、扬声器一次说明白
MICIN、LINEIN的区别 MICIN接口用来连接麦克风,芯片内部有放大器,可以对来自麦克风的信号进行放大。 LINEIN只能输入音频信号,芯片内部没有放大器,因此不能连接麦克风,只能输入来自其他播放器的音频信号。 如下就是全志H3的内部框图,可以看到他们的区别:LINEOUT、HPOUT 同样的从上面的H3框图可以看出,LINEOUT是音频信号输出,此信号未经放大器放大,所以功率小,驱动能力弱,只能输出到其他的音频接收设备(比如电脑音响),不能直接接到耳机、扬声器。 电脑音响接原创 2021-10-29 15:22:52 · 37381 阅读 · 0 评论 -
NanoPi NEO Air使用十一:编写SPI驱动点亮TFT屏幕,ST7789V
开发板引出来了spi0本节用spi0驱动一个spi接口的屏幕,屏幕如下:240x240分辨率,1.3寸,主控为ST7789。与开发板的引脚连接确定如下:功能IOGNDPin65VPin2LCD_RESETPin7-PG11LCD_DCPin22-PA1SPICLKPin23-PC2SPIMOSIPin19-PC0修改设备树spi0节点定义在/home/ql/linux/H3/linux/arch/arm/boot/dts/s原创 2021-10-27 22:50:15 · 4284 阅读 · 3 评论 -
NanoPi NEO Air使用十:自己编写驱动来控制LED
修改设备树打开/home/ql/linux/H3/linux/arch/arm/boot/dts/sunxi-h3-h5.dtsi文件,发现H3的pin功能都是由pinctrl子系统控制的: pio: pinctrl@01c20800 { /* compatible is in per SoC .dtsi file */ reg = <0x01c20800 0x400>; interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>原创 2021-10-27 13:18:36 · 1088 阅读 · 1 评论 -
NanoPi NEO Air使用九:使用Linux内核自带的LED驱动
修改设备树从U-boot的加载信息可以知道,使用的设备树文件为sun8i-h3-nanopi-neo-air.dtbdtb是由/home/ql/linux/H3/linux/arch/arm/boot/dts/sun8i-h3-nanopi-neo-air.dts编译得到的。原创 2021-10-25 22:41:43 · 931 阅读 · 0 评论 -
linux驱动常用函数
目录设备树常用 OF 操作函数查找节点的 OF 函数1、of_find_node_by_name2、of_find_node_by_type3、of_find_compatible_node4、of_find_matching_node_and_match5、of_find_node_by_path查找父/子节点的 OF 函数1、of_get_parent2、of_get_next_child提取属性值的 OF 函数1、of_find_property2、of_property_count_elems_of原创 2021-10-25 22:31:42 · 1719 阅读 · 0 评论 -
linux的platform驱动
如下内容来自《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》 将设备信息从设备驱动中剥离开来,驱动使用标准方法去获取到设备信息(比如从设备树中获取到设备信息),然后根据获取到的设备信息来初始化设备。 这样就相当于驱动只负责驱动,设备只负责设备,想办法将两者进行匹配即可。这个就是 Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。总线就是驱动和设备信息的月老,负责给两者牵线搭桥,如图: 当我们向系统注册一个驱动的时候,总原创 2021-10-25 11:24:51 · 2150 阅读 · 1 评论 -
pinctrl 和 gpio 子系统
pinctrl 子系统pinctrl 子系统简介 Linux 驱动讲究驱动分离与分层, pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。我们先来回顾一下上一章是怎么初始化 LED 灯所使用的 GPIO,步骤如下: ①、修改设备树, 添加相应的节点,节点里面重点是设置 reg 属性, reg 属性包括了 GPIO相关寄存器。 ② 、 获 取 reg 属 性 中 IOMUXC_SW_MUX_CTL_PAD_G原创 2021-10-24 21:12:45 · 2989 阅读 · 0 评论 -
NanoPi NEO Air使用八:编写个简单的驱动和应用程序
在Ubuntu用户文件夹下新建个测试目录,比如我的linux源码目录为:/home/ql/linux/H3/linux。本驱动和应用程序源码放置的目录为/home/ql/linux/H3/MyDriver/01_chrdevbase然后在此目录下添加3个文件:驱动源文件chrdevbase.c#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include &原创 2021-10-23 18:20:59 · 1014 阅读 · 0 评论 -
NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码
安装交叉编译器访问此处下载地址的toolchain目录,下载交叉编译器arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz,然后解压编译器:$ mkdir -p /opt/FriendlyARM/toolchain$ tar xf arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:$原创 2021-10-23 17:37:07 · 1534 阅读 · 1 评论 -
设备树学习笔记
学习正点原子《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》个人笔记设备树编译 设备树源文件扩展名为.dts, DTS 是设备树源码文件, DTB 是将DTS 编译以后得到的二进制文件。将.dts 编译为.dtb需要用到 DTC 工具,DTC 工具源码在 Linux 内核的 scripts/dtc 目录下。 如果要编译 DTS 文件的话只需要进入到 Linux 源码根目录下,然后执行make all或者make dtbs “make all”命令是编译 Linux原创 2021-10-23 13:20:19 · 1818 阅读 · 0 评论 -
Linux 驱动 Printk 在终端没有输出
驱动使用printk 来输出信息,而不是 printf!因为在 Linux 内核中没有 printf 这个函数。 printk 相当于 printf 的孪生兄妹, printf运行在用户态, printk 运行在内核态。在内核中想要向控制台输出或显示一些内容,必须使用printk 这个函数。不同之处在于, printk 可以根据日志级别对消息进行分类,一共有 8 个消息级别,这 8 个消息级别定义在文件 include/linux/kern_levels.h 里面,定义如下:#define KERN_SO原创 2021-10-22 19:03:46 · 3115 阅读 · 0 评论 -
嵌入式Linux学习笔记
常用操作&相关知识压缩解压解压.tar.bz2tar -vxjf linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2压缩.tar.bz2tar -vcjf alientek_uboot.tar.bz2 alientek_uboot内核目录linux内核编译过程make xxx_defconfig命令配置 Linux 的时候如下两行命令会执行脚本scripts/Makefile.build:@make -f ./scripts/Makefile.buil原创 2021-10-21 19:41:48 · 8825 阅读 · 4 评论 -
vmlinux、 Image, zImage、 uImage 的区别
来自正点原子《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》vmlinux 是 ELF 格式的文件,但是在实际中我们不会使用 vmlinux,而是使用 zImage 或 uImage 这样的 Linux 内核镜像文件。那么vmlinux、 zImage、 uImage 他们之间有什么区别呢?①、 vmlinux 是编译出来的最原始的内核文件,是未压缩的,比如正点原子提供的 Linux 源码编译出来的 vmlinux 差不多有 16MB②、 Image 是 Linux 内核原创 2021-10-21 16:19:12 · 1554 阅读 · 0 评论