设备与模块
设备类型主要设备类型在Linux系统中,设备被抽象为文件,通过文件系统进行管理。根据设备的功能和特性,主要分为以下三种类型:
1. 字符设备(Character Device)
定义:以字符流(字节流)的形式传输数据,数据的读取和写入是顺序的、无缓冲的,不支持随机访问。
特点:
数据传输实时性强,常用于单次少量数据交互的场景。
不支持通过文件系统的lseek命令随机定位读写位置。
常见设备:
键盘、鼠标、串口(如/dev/ttyS0)、终端(如/dev/tty1)、打印机等。
部分传感器设备(如温度传感器、串口通信设备)。
设备文件标识:
在/dev目录下,设备文件的类型标识为c(通过ls -l命令查看)。
示例:crw-rw-r-- 1 root root 1, 3 May 23 08:00 /dev/null(c表示字符设备)。
2. 块设备(Block Device)
定义:以数据块(Block,如4KB为一个块)为单位传输数据,支持随机访问(可通过块地址直接定位数据),通常有数据缓冲机制。
特点:
适合大批量数据的快速读写,如磁盘存储。
支持文件系统的创建(如EX ...
uboot详解--初级
从事嵌入式音视频AI开发中,需要多次使用uboot这个bootleader,本文用来记述我工作学习中所学到的知识点和心得本文主要是为了能够运行起uboot,裁减后面有时间再学习。首先第一步,删除uboot目录下没有用的到的配置文件,太多了,不需要,架构和板子支持的没法动,删除就会出错。
链接脚本详解• 拿到半导体厂商给的uboot,进行第一次编译,编译后得到一个链接文件。从链接文件开始分析,链接的后缀为.lds在使用imx6ull进行编译时,要把程序的起点链接到0x878000000
1arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^
这样所有文件都会链接到这个地址区。
分析得到uboot程序启动入口为_start。
123OUTPUT_FORMAT( ("elf32-littlearm", , "elf32-littlearm", , "elf32-littlearm") )OUTPUT_ARCH(arm)ENTRY(_start)
•上面代码 ...
驱动编写(linux)
前置123456789101112131415161718192021222324252627282930查看设备节点驱动注册成功生成设备节点ls /dev/ 查看加载的设备查看设备号主设备号 cat /proc/devices 包括字符设备和块设备MISC设备驱动次设备号cat /proc/misc主次设备号等信息ls /dev/dev_name -al查看类class_create函数创建成功后,使用命令ls /sys/class查看查看设备device_create函数创建成功后,使用命令ls /dev/查看查看已加载的模块lsmod设备树查看设备树节点ls /proc/device-tree查看设备树属性在设备树相应目录下,cat [Properties]查看内核打印信息dmesg查看设备树节点ls /proc/device-tree
https://zhuanlan.zhihu.com/p/425420889 文章记录
1、字符设备1-1、加载驱动模块12比如insmod drv.ko
如果drv.ko设备存在了依赖关系,那么就必须先加载所依赖的模块, ...
低版本内核适配exfat文件系统
低版本内核适配exfat文件系统两种选择1、exfat-nofuse –(社区版本)
1https://github.com/dorimanx/exfat-nofuse
2、exfat-linux –(三星维护的版本)
exfat-nofuse用于 exFAT、FAT12、FAT16 和 vfat (FAT32) 文件系统的 Linux 非熔断读/写内核驱动程序。最初移植自 Android 内核 v3.0。
作为独立模块安装:12makesudo make install
要手动加载驱动程序,请以 root 身份运行以下命令:
1modprobe exfat
在我的例子中,您还可以使用CROSS_COMPILE标志指定自定义工具链:
1CROSS_COMPILE=../dorimanx-SG2-I9100-内核/android-toolchain/bin/arm-eabi-
作为内核的一部分安装:让我们以 [linux] 作为内核源代码 dir 的路径…
12cd [linux]cp -rvf exfat-nofuse [linux]/fs/exfat
编辑 [linux ...
富瀚mmc移植
mmc 移植linux自带的无法对出错的mmc进行处理,需要自己移植mmc工具,参考mmc-utils
编译脚本:123456789101112131415161718192021#!/bin/bashCC=/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gccCROSS_COMPILE=/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabiARCH=armexport CC=/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gccexport CROSS_COMPILE=/home/tulin ...
openssl和unzip和zip移植
openssl 移植编译脚本:
1234567891011121314#!/bin/bashmake cleanmkdir outputexport CC=/home/wangyp/project/dtcwyp/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gcc./Configure \ no-zlib \ --shared \ --prefix=$(pwd)/output openssl-1.0.2h \ os/compiler:arm-fullhanv3-linux-uclibcgnueabi-b6 \ -DOPENSSL_THREADS \ -Wno-psabi -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizationsmakem ...
x264和x265 移植
x264 移植编译脚本
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#!/bin/bashsudo chmod 777 ./* -Rfpath_cur=$(pwd)# rm -rf x264build_x264() { cd x264 sudo make clean local path="/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin" build_x264=${path_cur}/buildx264 sudo rm -rf $build_x264 sudo mkdir -p $build_x264 ./configure \ --prefix=$build_x264 \ --host=arm-fullhanv3-linux-ucl ...
富瀚ffmpeg移植
编译脚本:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138rm -rf ffmpeg# sudo chown $USER:$USER /outputoutput=${PWD}/outputrm -rf outputmkdir -p ./outputbuild_ffmpeg() {cd ffmpeg# make distcleanexport PATH=/home/tuling/.FuHan-arm-l ...
arm-A7中断
有时候我们很多文件需要链接到指定的区域,或者叫做段里面,比如在 Linux 里面初始化函数就会放到 init 段里面。因此我们需要能够自定义一些段,这些段的起始地址我们可以自由指定,同样的我们也可以指定一个文件或者函数应该存放到哪个段里面去。
要完成这个功能我们就需要使用到链接脚本,看名字就知道链接脚本主要用于链接的,用于描述文件应该如何被链接在一起形成最终的可执行文件。其主要目的是描述输入文件中的段如何被映射到输出文件中,并且控制输出文件中的内存排布。比如我们编译生成的文件一般都包含 text 段、 data 段等等。
链接脚本的语法很简单,就是编写一系列的命令,这些命令组成了链接脚本,每个命令是一个带有参数的关键字或者一个对符号的赋值,可以使用分号分隔命令。像文件名之类的字符串可以直接键入,也可以使用通配符“*”。最简单的链接脚本可以只包含一个命令“SECTIONS”,我们可以在这一个“SECTIONS”里面来描述输出文件的内存布局。我们一般编译出来的代码都包含在 text、 data、 bss 和 rodata 这四个段内,假设现在的代码要被链接到 0X10000000 这个地址 ...
kernel-fuhan
kernel 开启硬件浮点一般是在.config中开启 ,最好编译器也指定浮点类型。性能:添加 NEON 优化选项可以进一步提升浮点运算性能
配置文件系统为了方便,将文件系统打包到kernel中,并添加到根目录。文件系统根目录下linuxur 要改为init。否则需要在uboot中用参数传递”rdinit=/linuxrc”。指定启动程序
查看emmc是否正常工作/dev/mmcblkp1 查看, 因为用的SD1接口,所以是mmcblkp1
驱动设备树配置首先配置pinctrl,然后配置设备树。pinctrl是复用引脚的,一般这是第一步。











