- 博客(36)
- 资源 (2)
- 收藏
- 关注
原创 制作aarch64 交叉编译器-pc版本
0. 系统环境系统:ubuntu16.041. 编译交叉编译工具链交叉编译工具链需要用到至少七个库:Binutils GCC glibc Linux Kernel MPFR GMP MPC同时我们还有两个用于优化的库:isl CLooG这两个库是可选的。搭建完成后我们会获得一系列编译、链接工具,包括我们熟知的gcc、ld等。工具版本1.binutils-2.34 2.gcc-7.3.0 3.glibc-2.31 4.gmp-6.2.0...
2021-08-04 17:31:27
1404
原创 memcpy和memmove函数区别
memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。第一种情况下,拷贝重
2021-08-03 09:06:11
429
转载 crosstool-ng-1.14.0制作交叉编译工具链
交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编译安装,后来由于这个太麻烦于是就有类似crosstool这样的自动化配置工具。 现在之所以用crosstool-ng是因为crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者。 crosstool的gcc版本只能到4.1.1,无法编译版本高于2.6.29的linux内核。而crosstool-ng一直保...
2021-05-27 19:44:21
402
原创 USB gadget serial and storage and ethernet
USB 虚拟串口简介1. USB虚拟串口简介 2.usb gadget 串口(serial)的配置和使用 3.USB中CDC-ECM的了解和配置1. USB虚拟串口简介USB虚拟串口属于USB通信设备类。在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口。在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线。另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制。串口设备的数据,由系统的串
2021-01-14 10:20:13
5166
9
原创 LINUX 互斥锁 学习
posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。即对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。使用互斥锁(互斥)可以使线程按顺序执行。通常,互斥锁通过确保一次只有一个线程执行代码的临界段来同步多个线程。互斥锁还可以保护单线程代码。要更...
2021-01-07 10:38:20
489
原创 nandflash oob解析
一般NAND Flash每一页大小为(512+16)字节(还有其他格式的NANDFlash,比如每页大小为(256+8)、(512+16)、(2048+64)、(2048+128)等),其中的512字节就是一般存储数据的区域,16字节称为OOB(Out OfBand)区。通常在OOB区存放坏块标记、前面512字节的ECC较验码等。而cramfs、jffs2文件系统映像文件中并没有OOB区的内容,如果将它们烧入NORFlash中,则是简单的“平铺”关系;如果将它们烧入NAND Flash中,则NANDFl.
2020-11-10 19:28:50
5079
转载 Linux 网络设备驱动开发(三)-网卡驱动深层分析
之前我们介绍了网卡是怎么把一个数据包发送到网络上的,但是这只是Linux网络系统中的一个非常小的部分。对于内核怎么把用户数据传递给网卡,以及内核怎么把网卡收到的数据传递给用户是一个庞大的知识。学过计算机网络的都知道,当用户需要发送数据的时候,需要根据路由表找到数据包下一站该发送到哪个路由器,这个路由器叫做这个网卡的邻居。如果邻居的MAC地址不知道,还需要通过ARP协议获取的路由去的MAC地址,这个过程交给邻居子系统来完成。分析过程还是依据第一节课中的5层模型来分析:1、系统调用接口2、协议无关层3
2020-10-23 13:40:32
682
转载 嵌入式Linux——网卡驱动(一):网卡驱动框架介绍
声明:文本是看完韦东山老师的视频和看了一些文章后,所写的总结。我会尽力将自己所了解的知识写出来,但由于自己感觉并没有学的很好,所以文中可能有错的地方敬请指出,谢谢。在介绍本文之前,我想先对前面的知识做一下总结,我们知道Linux系统的设备分为字符设备(char device),块设备(block device),以及网络设备(network device)。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),字符设备则没...
2020-10-23 13:39:44
1121
转载 Linux 网络设备驱动开发(二) linux内核网络分层结构
Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。一、内核网络结构 在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介层的分层体系设计。 网络驱动功能层主要通过网络驱动程序实现。 在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作。 net_de...
2020-10-23 13:38:21
246
原创 imx8mn同核异构开发cortex-M7
一:下载和安装交叉编译 下载coretex-M系列交叉编译器 请在以下链接下载您开发所用的电脑匹配编译器,我的电脑采用的是ubuntun16.04,所以下载了gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm安装交叉编译器到.
2020-07-31 11:41:09
789
原创 openwrt overlayfs挂载过程
openwrt的overlayfs 通过/etc/preinit调用 /sbin/mount_root来完成rootfs的切换挂载和overlay所以研究下openwrt工程中mount_root的实现。源码目录 fstools-2016/mount_root.c代码流程: 1.overlay_mount_fs() 2.mount_extroot(); 3.mount_move(“/tmp”, “”, “/overlay”) 4.fopivot(“/overl...
2020-05-11 17:57:42
7887
原创 eMMC启动uboot
eMMC分区介绍分区 名称 描述0x0 No access to boot partition(default) 不可访问分区0x1 R/W boot partition 1 读写引导分区10x2 R/W boot partition 2 读写引导分区20x3 R/W Replace Protect Memory...
2019-12-13 10:45:51
866242
原创 devm_gpiod_get_index用法
调用流程:在看显示模块的代码时看到一个函数devm_gpiod_get_index(), 之前没接触过,它的调用如下: devm_gpiod_get_index -> //index为0 gpiod_get_index可以看到devm_gpiod_get_index只是对gpiod_get_index的包装而已,并且index为0。index参数后面会提。函数...
2019-11-15 09:37:49
8522
5
原创 arm64 linux 编译perf工具
perf linux kernel自带的性能检测工具。perf是linux内核发行版自带源码工具,需要内核开启某些选项支持.1.内核下编译perf工具, cd 到 kerne/tools路径下2.编译make CROSS_COMPILE=aarch64-linux- ARCH=arm64 perf_clean V=1make CROSS_COMPILE=aarch64-li...
2019-10-21 10:01:46
8024
转载 linux常用命令--开发调试
前言Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。示例程序我们用一个小程序,来帮助后面我们对这些命令的描述,程序清单cmdTest.c如下:#include<stdio.h>inttest(inta,intb){returna/b;...
2019-10-11 09:24:08
244
转载 向linux内核版本号添加字符/为何有时会自动添加“+”号
本文转自:https://blog.youkuaiyun.com/adaptiver/article/details/7225980之前每次由于git仓库编译出来每次都带有'+', 导致都需要使用git archive单独拉出一个干净的源码出来编译,这样一方面要重新编译,耗费时间,另一方面,改动会更麻烦,可能要本地来回打patch. 于是分享下面来解决这个问题。有个简单的办法:无论kernel还是ub...
2019-09-25 15:56:50
261
转载 EMMC 原理 :分区管理
EMMC 原理 :分区管理1. Partitions OvervieweMMC 标准中,将内部的 Flash Memory 划分为 4 类区域,最多可以支持 8 个硬件分区,如下图所示:1.1 概述一般情况下,Boot Area Partitions 和 RPMB Partition 的容量大小通常都为 4MB,部分芯片厂家也会提供配置的机会。General Purpos...
2019-05-28 10:21:22
1982
原创 SMS短信的编码规则
SMS短信的PDU编码规则 目前,发送短消息常用Text和PDU(Protocol Data Unit)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送...
2019-02-26 15:53:16
6229
翻译 SPI协议
SPI协议是一个 4 线、全双工的、同步串口协议。根据串口时钟SCLK的相位SCPH和极性SCPOL的不同,有 4 种组合。1、在主设备处于不使能或者空闲的状态下,主设备输出的从设备选择信号CS保持高电平。2、时钟极性SCPOL参数决定串口时钟SCLK 在无效的状态下是高电平还是低电平: (1)SCPOL=0,串口时钟(sclk)在无效的状态下保持低电平。 (2...
2019-02-20 14:06:28
795
转载 短信回执设置
在pdu串中设置短信回执的方法。就是在pdu-type这个8位位组一般都设置为11:包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)二进制表示形式:0 0 0 10 0 01TP-MTI:01 TP-Message-Type-Indicator(消息类型指示符)B...
2019-02-13 17:50:06
2193
原创 uboot的常用命令
help //列出当前uboot所有支持的命令 help 命令 //查看指定命令的帮助 reset //重启uboot bootm //用于启动内核 用法: bootm 0x42000000 //从内存地址0x42000000启动内核, 启动前需把内核镜像uImage存放到指定的内存地址 bootz /...
2018-11-22 18:02:01
1851
转载 nandflash的特性
nandflash的结构 nandflash的结构有页(page), block(块)的概念,其中页是真实概念,而块儿是虚拟概念(目的是为了更好的管理存储空间) page: 一个page大小为2K + 64bytes, 如上图所示,其中的64bytes是所在页的infomation, 记录着此页的使用情况,比如剩余存空间等 block: 一个block由64个页组成, 一个nandflas...
2018-10-31 10:52:08
372
转载 Nand Flash管理算法介绍之主要模块介绍
概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB,全部擦除为1,也就是里面的内容全部都是0xFF了,由于是一下子就擦除了,相对来说,擦除用的时间很短,可以用一闪而过来形容,所以,叫...
2018-10-31 10:46:47
1258
转载 Linux-Nand Flash驱动(分析MTD层并制作NAND驱动)
1.使用的nand flash型号为K9F2G08U0M,它的命令如下: 1.1我们以上图的read id(读ID)为例,它的时序图如下: 首先需要使能CE片选1)使能CLE2)发送0X90命令,并发出WE写脉冲3)复位CLE,然后使能ALE4)发送0X00地址,并发出WE写脉冲5)设CLE和ALE为低电平6)while判断nRE(读使能)是否为低电平7...
2018-10-12 10:14:01
603
转载 C 获取文件大小
在C语言中测试文件的大小,主要使用二个标准函数。1.fseek 函数原型:int fseek ( FILE * stream, long int offset, int origin ); 参数说明:stream,文件流指针;offest,偏移量;orgin,原(始位置。其中orgin的可选值有SEEK_SET(文件开始)、SEEK_CUR(文件指针当前位置)、SEEK_E...
2018-10-11 17:31:29
444
转载 链路层常见报文格式
1. ethernet帧(除去上层负载后长度为18字节) 以太帧有好多种,我们最常用到的是Ethernet IIEthernet II即DIX 2.0:Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARPA Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4...
2018-09-03 14:24:06
6328
3
转载 使用Initramfs挂载根文件系统,编译过程multiple target patterns(多个目标匹配)问题的解决
编译内核前,配置内核用Initramfs挂载根文件系统,配置选项如下: Genera setup--------------------------------> [ * ] Initial RAM filesystem and RAM disk (initramfs/initrd)support( /home/myrootfs )Initramfs source file...
2018-08-20 15:21:42
3566
转载 initramfs文件系统制作
Initramfs文件系统 initramfs最初的想法是Linus提出的,把cache当作文件系统装载。他在一个叫ramfs的cache实现上加了一层很薄的封装,其它内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。 initramfs就是tmpfs的一个应用。 ramdisk是一个基...
2018-08-15 10:08:39
784
转载 Linux内核调试方法总结之死锁问题分析
死锁问题分析死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务,而且还会占用系统资源,影响其他进程。所以内核中设计了内核死锁检测机制,一旦发现死锁进程,就重启OS,快刀斩乱麻解决问题。之所以使用重启招数,还是在于分布式系统中可以容忍单点崩溃,不能容忍单点进程计算...
2018-07-23 17:12:54
3369
原创 Linux内核死锁检测
实际产品运行过程中,Linux系统僵死,屏幕无任何有效串口打印信息,网络中断、键盘鼠标没有任何响应。这种故障现象,可能是因为Linux内核死锁导致。由于无任何有效打印信息,内核日志中也没有记录,就无法定位故障根因。 如何让Linux内核在僵死前打印相关信息,对问题定位尤为关键。其中一个有效手段是打开“Kernel Hacking”选项,然后重新编译内核。对于Linux(...
2018-07-23 15:26:52
1580
1
转载 Linux Thermal 框架解析
Linux Thermal 是 Linux 系统下温度控制相关的模块,主要用来控制系统运行过程中芯片产生的热量,使芯片温度和设备外壳温度维持在一个安全、舒适的范围。那下面我们就来一起看看对于温度控制这样一个需求,Linux 内核是怎么实现的。Thermal 的主要框架要实现一个温度控制的需求,试想一下我们是不是最少要有获取温度的设备和控制温度的设备这两个最基本的东西?当然附带的也会产生一些使用温...
2018-06-20 21:12:09
3666
原创 iotop 移植linux/arm
iotop可以很直观的显示出来哪个程序在消耗你的硬盘,可以帮助我们在开发过程中迅速定位出那个进程占用I\O资源,下面记录着移植过程( Linux/arm 3.14.28 Kernel ): 1:在编译内核make menuconfig的时候一定要把下面选项选上:General setup —> CPU/Task time and stats accounting -> [*] ...
2018-06-20 21:10:27
1931
转载 制作嵌入式文件系统工具 mkfs.ext2 mkfs.ext3 mkfs.ext4
1. 下载最新的源码包e2fsprogshttp://sourceforge.net/projects/e2fsprogs/2. 解压源码包到某个目录,本人的是:/root/Desktop/common;3. cd进入到刚解压的源码目录,并建立新目录 release 用于安装编译连接后的程序;4. cd进入release目录,并建立配置脚本configure-easy2440,根据我们的应用目标,...
2018-06-20 21:09:48
4043
原创 linux-sfdisk用法说明
[root@ /]#sfdisk --force -uM /dev/mmcblk1 << EOF2> 0,256,832> 256,128,83> 384,,83E> EOF(<start> <size> <id><bootable> <c,h,s> <c,h,s>)...
2018-06-20 21:08:45
3759
转载 OpenWrt开发环境搭建
OpenWrt开发环境搭建第一部分:搭建编译环境· 1、安装Ubuntu(编译需要Linux环境),到其官网下载,版本根据自己所需选择即可。可以选择安装到虚拟机或者物理机,图形化安装而且是中文版,连安装都搞不定的,可以关闭本页面了;· 2、以非root用户登陆,打开“应用程序----附件----终端”。· 3、切记不要改动软件源,同时按住Ctrl + Alt + T,调出终端;· 4、逐条输入下列...
2018-06-20 21:07:29
1464
转载 si3210作用简述
Si3210是Silab的一款Slic芯片(用户线路接口),主要用于voip、pbx、IP pbx等设备。说白了,它可以让你的这些数字产品挂接模拟电话。它集成DC—DC转换,Audio Codec。支持DTMF(双音多频)、FSK来电显示等功能。是一个功能比较完整的slic芯片。 基于Slic的基本驱动程序是很简单的。因为在网上就能找到silab提供的参考代码。只需要移植spi
2017-03-31 10:07:09
1524
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人