ARM-linux
文章平均质量分 65
奔跑的码仔
心有多大,舞台就有多大
展开
-
Linux内核GPIO子系统分析
概述Linux内核的GPIO子系统通过gpiolib来实现,gpiolib始于2.6.24版本,这里是gpiolib的初始提交信息,这里是gpiolib的初始代码。下面是子系统的架构图:gpiolib向上为使用gpio的设备驱动程序提供了统一的接口,向下为SoC的gpio控制器提供注册到系统的接口。gpiolib为驱动程序提供的服务包括:系统中GPIO信息的管理,比如有多少个GPIO,每个GPIO的编号是什么等;GPIO的申请、释放;IO的输入、输出方向的设置;IO电平的输出或者输入设置;原创 2020-08-23 10:18:31 · 6345 阅读 · 6 评论 -
Linux i2c-dev简析
上篇文章简要分析了如何编写一个Linux下的I2C设备驱动程序。编写驱动程序毕竟有一定的门槛,需要熟悉内核各种相关的开发规范,有时为了快速的测试一款I2C设备的功能,临时编写驱动程序可能会使得工期比较紧张;并且有时I2C设备十分的简单,为此编写一个单独的驱动程序未免有点“兴师动众”。i2c-dev框架很好的解决了上面的问题,使用该框架可以使我们在用户空间上编写I2C通信程序。i2c-dev在内核中封装了关于I2C通信所需要的所有通信细节,通过ioctl接口将这些功能暴露给用户空间程序调用。用户应用程序使用原创 2020-08-04 15:33:42 · 6676 阅读 · 0 评论 -
Linux I2C设备驱动基本规范
不同于单片机驱动开发,即使是简单的I2C设备驱动程序,如果要在Linux上实现同种功能的驱动程序,事情也会变的复杂起来。对于初学者而言,主要的困难就是不知道如何使用Linux现有的驱动框架,去完成驱动程序的开发。I2C设备驱动,相对来说比较简单,但由于Linux大部分设备驱动框架十分的类似,所以,通过对于I2C驱动框架的学习,可以作为继续深入Linux其他设备驱动框架的基础。学习一项技术的最好方式就是去应用它,所以为了更为高效的学习,本文结合两个i2c设备驱动实例,来分析如何从零实现一个驱动程序。程序框原创 2020-08-03 18:44:14 · 2656 阅读 · 0 评论 -
嵌入式Linux应用崩溃调试-难以追踪的栈信息
在进行嵌入式Linux应用程序开发时,经常会用到gdb对崩溃日志进行分析,一般情况下,可以直接定位到崩溃的位置。但有时分析core文件时,却看不到有意义的崩溃栈,这时问题就有点复杂了,出现这种现象的原因可能有这么几个:应用程序在编译时没有指定-g选项,导致可执行程序没有调试信息。应用程序所依赖的动态库和静态库没有调试信息。应用程序的运行时环境没有调试信息,比如libc等。嵌入式Linux系统应用程序运行时环境和交叉编译工具链的运行时环境版本不一致,比如,嵌入式Linux环境中所使用的libc库和交原创 2020-06-04 11:26:41 · 5439 阅读 · 0 评论 -
如何基于Buildroot和Qemu搭建嵌入式Linux系统环境
为了能够更好的学习嵌入式Linux内核,本文基于qemu-system-arm工具模拟ARM公司的VersatileExpress硬件环境,基于buildroot工具制作rootfs,并且扩展了buildroot,增加内核配置管理,定制rootfs等功能。我的上一篇文章,基于Buildroot的rootfs制作,讲述了如何基于Buildroot制作一个rootfs,所以,本文对于该部分进行了省略......原创 2020-02-21 16:50:07 · 2301 阅读 · 0 评论 -
GPIO驱动实践-基于4.18.7内核
1. GPIO子系统的变化2. 编程模式2.1. GPIO APIs2.2 编程规范3. 驱动示例4. 总结1. GPIO子系统的变化最近在研究最新的Linux kernel 4.18.7时,发现其关于GPIO子系统的发生了比较大的变化。而且在linux/gpio.h中做了关于声明: * This is the LEGACY GPIO bulk includ...原创 2018-09-17 17:39:40 · 3176 阅读 · 0 评论 -
gpio-key驱动分析
文章目录前言测试平台架构DTS配置基本数据结构设备注册设备probe流程设备资源解析按键注册中断处理中断处理-top level中断处理-bottom level应用测试设备DTS配置gpio-keys驱动使能按键事件应用测试总结前言Linux内核中的gpio-keys.c(driver/input/keyboard/gpio-keys.c)统一了所有关于按键的驱动实现方式。其良好的代码架构可...原创 2018-09-29 09:30:40 · 9657 阅读 · 9 评论 -
基于Buildroot的rootfs制作
基于Buildroot的rootfs制作本文当记录使用buildroot制作rockchip-rk3288平台的rootfs过程。1.准备工作首先,需要到Buildroot的官网下载最新版本的源码,以及官方的使用手册。使用手册的第二章说明了Buildroot在Linux上编译时所依赖的工具以及第三方库。下面列列出了可能用到的软件包:sudo apt-get install repo git...原创 2018-12-18 09:12:32 · 6617 阅读 · 1 评论 -
Analyzing the Linux boot process-分析Linux启动过程
本文翻译自Analyzing the Linux boot process.箴言:了解运行良好的系统是将来处理不可避免的故障的很好准备开源软件领域中流行的最为古老笑话:"the code is selfdocumenting."经验表明:阅读源码类似于收听天气预报(但明智的人仍会走出去检查天气)。下面是一些关于如何利用熟悉的调试工具在引导时检查和观察Linux系统的技巧。了解运行良好的系统是...原创 2019-02-21 17:12:45 · 928 阅读 · 0 评论 -
Booting ARM Linux-启动ARM-Linux
文章目录Booting ARM Linux设置和初始化RAM初始化一个串口检测机器类型设置启动数据设置内核标记列表设置Device Tree加载 initramfs调用kernel imageBooting ARM Linux本文翻译自Linux内核文档,如有翻译不当,敬请谅解!以下文字说明与内核的2.4.18-rmk6版本及以上相关。为了引导ARM Linux,您需要一个引导加载程序,它...原创 2019-02-22 11:52:05 · 867 阅读 · 0 评论 -
Linux动态库常见问题之-“cannot open shared object file No such file or directory“的解决办法
Linux编写程序时,会经常的接触动态库,而在程序运行时可能会遇到类似于:libxxx.so cannot open shared object file No such file or directory的问题,这个代表什么含义,该怎么解决呢?含义这个问题代表的含义是,可执行程序在加载libxxx.so库时,找不到该库。至于找不到的情况分为两种:系统里根本不存在libxxx.so库;libx...原创 2019-02-25 11:42:35 · 108401 阅读 · 1 评论 -
04-Linux设备树系列-GPIO驱动实践
1. 前言2. GPIO编程模式2.1 编程接口2.2 DTS配置2.3 GPIO驱动程序2.3 GPIO测试程序3. GPIO子系统的变化1. 前言GPIO驱动开发可能算是Linux内核设备驱动开发中最为简单、最常见的一个方向,对于开发板的按键、LED、蜂鸣器、电源控制等模块,可能都是使用GPIO实现的。Linux内核的GPIO子系统在内核不断的演进过程中进...原创 2018-09-17 14:48:39 · 10847 阅读 · 2 评论 -
Linux内核之pinctrl子系统
1. 前言2. 软件框架2.1. pinctrl-core2.2. pinctrl-driver2.3. pinctrl-client1. 前言众所周知,ARM SoC提供了十分丰富的硬件接口,而接口物理上的表现就是一个个的pin(或者叫做pad, finger等)。为了实现丰富的硬件功能,SoC的pin需要实现复用功能,即单独的pin需要提供不同功能,例如,pi...原创 2018-09-16 11:01:37 · 4343 阅读 · 3 评论 -
02-Linux设备树系列-工具使用
DTS文件DTCDTBBindings文件BootLoader支持DTS文件文件.dts是一种ASCII文本格式的设备树描述,由于其是纯文本形式的,所以十分适合开发人员阅读和修改。由于多个开发板会对应于同一款SoC,所以,可以将关于同一款SoC的DT配置提取成一个单独文件,称其为.dtsi文件。.dts和.dtsi文件类似于C语言的源文件和头文件的关系,所以.dtsi...原创 2018-09-05 11:17:59 · 1522 阅读 · 0 评论 -
linux 网络协议栈-队列机制
Packet queues are a core component of any network stack or device. They allow for asynchronous modules to communicate, increase performance and have the side effect of impacting latency. This article翻译 2013-09-28 11:51:04 · 3653 阅读 · 0 评论 -
交叉编译libxml2
arm-linux-gnueabihf-ld原创 2014-10-11 17:15:31 · 3294 阅读 · 1 评论 -
交叉编译sqlite3
交叉编译sqlite3原创 2014-10-11 17:43:27 · 1905 阅读 · 0 评论 -
交叉编译tcpdump
交叉编译TCPDUMP编译平台 PC:ubuntu-14.04 Cross-tool:arm-none-linux-gnueabi-gcc 4.8.3 Target:Atmel9260编译步骤原创 2016-03-05 11:33:51 · 2269 阅读 · 0 评论 -
at91sam9260 OpenWRT u-boot移植
ateml9260 移植OpenWRT U-boot1. 直接在make menuconfig中选择编译at91sam9260ek平台的u-boot,烧写到开发板后效果**U-Boot 2010.06-dirty (Jun 28 2017 - 09:14:34)DRAM: 64 MiBNAND: 1024 MiB*** Warning - bad CRC, using default env原创 2017-07-24 19:20:37 · 2403 阅读 · 0 评论 -
android平台移植valgrind
Android平台移植Valgrind开发平台信息PC: Ubuntu16.04Android:Firefly Rk3288 Reload + Android 5.1交叉编译器:arm-linux-androideabi-gcc 4.6 衍生自android-ndk-r10b(开发工具的生成方式可以参见Android C/C++开发指南)valgrind版本valgrind-3.13.0配原创 2017-09-18 17:11:20 · 1553 阅读 · 0 评论 -
Linux 串口编程(基于RAW模式)
Linux下的串口编程对于大多数的系统编程人员来说肯定不陌生,特别是对于嵌入式系统开发人员来说,其会经常使用串口与各种各样的硬件设备进行通信。下面总结一下,Linux串口编程的基本模式和常见问题。编程模式Linux下的串口以设备文件的形式存在,所以,对于串口设备的所有操作都时围绕其设备文件而展开。熟悉Linux文件相关操作的开发人员,应该很熟悉下面的模式:打开文件(open);...原创 2018-08-31 11:38:50 · 5829 阅读 · 1 评论 -
Glibc version `GLIBC_2.17‘ not found问题解决办法
Glibc version `GLIBC_2.17’ not found问题解决办法今天在ARM板上测试一个串口性能测试工具linux-serial-test时,提示 “version `GLIBC_2.17’ not found”,这个问题还是第一次见,简单查了一下资料,基本确定是应用程序所依赖的glibc环境在目标平台上不支持。可是,之前使用同一交叉编译器编译出来的程序一直没问题。看了一下...原创 2018-08-31 16:03:56 · 13189 阅读 · 0 评论 -
01-Linux设备树系列-基本语法
设备树使用本页面介绍了如何为新机器编写设备树。它旨在提供设备树概念的概述以及它们如何用于描述机器。有关设备树数据格式的完整技术说明,请参阅 ePAPR v1.1规范.ePAPR规范比本页面介绍的基本主题包含更多详细信息,请参阅此页面以获取本页未涵盖的更高级用法 .ePAPR目前正在为使用的DeviceTree文档规范新的名称进行更新。基本数据格式设备树是节点和属性的简单树型结构。属...原创 2018-09-04 12:08:06 · 7796 阅读 · 3 评论 -
00-Linux设备树系列-简介
1.历史2.数据模型2.1高级视图2.2平台识别2.3运行时配置2.4设备数量(Device population)附录A:AMBA设备设备树数据的Linux使用模型作者:Grant Likely grant.likely@secretlab.ca本文介绍Linux如何使用设备树。概述 设备树相关的数据格式的资料可以在设备树使用页面 elinux.org...原创 2018-09-04 17:39:06 · 2193 阅读 · 0 评论 -
进程地址空间的布局以及进程堆栈帧的结构
前言从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患。历史上最著名的缓冲区溢出攻击可能要算是1988年11月2转载 2013-07-23 23:30:21 · 1910 阅读 · 0 评论