
嵌入式linux
light546
喜欢运动……喜欢篮球……专注嵌入式底层软硬件……
展开
-
ntp交叉编译,arm移植
解压源码:ntp-4.2.8p8.ar.gz配置:./configure --prefix=/home/light/ntp_20180725/ --host=arm-linux CC=arm-linux-gnueabi-gcc --with-yielding-select=no --with-openssl-incdir=/home/light/Adsp573/buildroot/output...原创 2018-07-25 11:53:34 · 2552 阅读 · 0 评论 -
inittab脚本启动解析
Linux 开机脚本启动顺序: 第一步:启动内核第二步:执行init (配置文件/etc/inittab)第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d rc.sysinit rc.d rc.local。。。第四步:启动login登录界面 login第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完转载 2015-08-24 11:20:36 · 1087 阅读 · 0 评论 -
arm板子挂在nfs失败-mount: wrong fs type
1.提示错误如下:# mount -t nfs -o nolock 192.168.12.90:/home/light/nfs /mnt/nfsmount: wrong fs type, bad option, bad superblock on 192.168.12.90:/home/light/nfs, missing codepage or helper progra原创 2015-07-28 10:43:11 · 2124 阅读 · 1 评论 -
堆&栈
内存分配方式有三种:[1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。[2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。[3]从堆上分配,亦称动态内存分配。程序在运转载 2015-06-15 13:18:45 · 442 阅读 · 0 评论 -
论 __lookup_machine_type的消失(Linux-3.0 ARMv7)
http://blog.chinaunix.net/uid-20543672-id-3019566.html在分析Linux-3.0内核启动的时,当分析到自解压后的汇编部分,发现head.S (arch\arm\kernel)中并没有对machine_type作任何的检查,只是检查了处理器ID(__lookup_processor_type)。在2.6.38及以前的代码:转载 2015-07-03 10:44:34 · 1376 阅读 · 0 评论 -
ARM linux启动分析
linux启动分析(1)---bootloader启动内核过程我分析的是2.4.19的内核版本,是xscale的平台,参考了网上很多有价值的帖子,也加入了自己的一些看法,陆续总结成文字,今天是第一篇:内核一般是由bootloader来引导的,通过bootloader启动内核一般要传递三个参数,第一个参数放在寄存器0中,一般都为0,r0 = 0;第二个参数转载 2015-07-02 11:36:00 · 569 阅读 · 0 评论 -
MACHINE_START与MACHINE_END
玩过或者移植过arm-linux的都应该知道在/arch/arm目录下有许多与具体处理器相关的目录,当然对于s3c2440的话所对应的目录就是 arch/arm/mach-s3c2440/,在里面找到与具体板子相关的文件mach-mini2440.c,这个文件大部分内容是对平台设备(例如串口,LCD,Nand falsh等)的结构体初始化,在这个文件的最后有一个非常重要的宏:M转载 2015-07-02 10:39:19 · 576 阅读 · 0 评论 -
ARM linux的启动部分源代码简略分析
2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用。 当内核映像被加载到RAM之后,Bootloader的控制权被释放。内核映像并不是可直接运行的目标代码,而是一个压缩过的zImage(小内核)。但是,也并非是zImage映像中的一切均被压缩了,映像中包含未被压缩的部分,这部分中包含解压缩程序,解压缩程序会解压缩映像中被压缩的部分。zImage使用gzip转载 2015-07-02 11:20:03 · 1402 阅读 · 0 评论 -
Makefile经典教程
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写make转载 2015-05-25 10:13:26 · 541 阅读 · 0 评论 -
Linux内核驱动之GPIO子系统
在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,然后应用程序直接调用。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers —> GPIO Support原创 2015-07-08 11:16:13 · 1691 阅读 · 0 评论 -
mmap详解
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式, 因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域转载 2015-06-08 13:26:57 · 498 阅读 · 0 评论 -
Linux内存管理之mmap详解
一. mmap系统调用1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系转载 2015-06-08 13:23:20 · 456 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的转载 2015-06-08 11:13:30 · 476 阅读 · 0 评论 -
Linux地址映射
http://blog.chinaunix.net/uid-20528014-id-314322.html一,线性映射与非线性映射1. 内存管理物理内存管理:Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构,操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些转载 2015-06-05 19:53:56 · 1845 阅读 · 0 评论 -
linux内存操作-----ioremap
对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CPU完成。那么CPU在这个过程中是如何找到外设的呢?尽管在一个系统中会有诸多的外设,在每个外设的接口电路中会有多个端口。但是如果系统能够每个端口都被赋予一个具体的地址值,那么在系统中就能轻易的找到任何一个外设。系统在管理的时候,不管是内存还是外设都需要分配一个内存地址。对于一个32bit的系统来讲,可寻址的范围为2^32=4G的原创 2015-06-05 09:06:41 · 555 阅读 · 0 评论 -
u-boot的Makefile分析
U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为 ppc_6xx-。U-BOOT的下载地址:http://sourceforge.net/projects/u-boot我下载的是1.1.5版本要了解一个LINUX工程的结构必须看懂Makefile,尤其是顶层的,没办法,UNIX世界就是这么无奈,什么东西都用文档去管理转载 2015-06-03 17:52:52 · 1363 阅读 · 0 评论 -
嵌入式系统中增加telnetd服务
利用busybox中的telnetd程序。1.busybox配置中选中telnetd。选择独立的模块,脱离inetd。Networking Utilities ---> [*] telnetd [*] Support standalone telnetd (not inetd only)2.注意一定要选择上l原创 2015-08-26 14:53:03 · 3782 阅读 · 0 评论 -
tslib移植
1.下载tslib源代码https://github.com/kergoth/tslib2.解压源代码tslib3.进入源代码文件夹# cd tslib-master4.配置# ./autogen.sh出错:./autogen.sh: 3: ./autogen.sh: autoreconf: not found下载工具:autoconf#原创 2015-08-27 13:29:50 · 827 阅读 · 0 评论 -
Ubuntu安装libssl-dev失败
Ubuntu安装libssl-dev失败安装pyOpenSSL时需要用到本机的libssl-dev库,进一步在Ubuntu上尝试安装库时出错,如下:ygu@guyongqiangx:~$ sudo apt-get install libssl-devReading package lists... DoneBuilding dependency tree Reading stat...转载 2018-06-07 22:52:18 · 3269 阅读 · 0 评论 -
ubuntu apt-get update : W: An error occurred during the signature verification.
ubuntu apt-get update : W: An error occurred during the signature verification.W: An error occurred during thesignature verification. The repository is not updated and the previous indexfiles will be...原创 2018-06-07 22:50:34 · 4349 阅读 · 0 评论 -
linux驱动的异步通知 驱动程序向应用程序发送信号
#include #include #include #include #include #include #include #include #include /* fifthdrvtest */ int fd; //信号处理函数 void my_signal_fun(in转载 2016-10-31 18:35:15 · 3590 阅读 · 1 评论 -
SSH Server Dropbear在嵌入式平台上移植
1.下载 dropbear-2015.68.tar.bz2。2.解压3.配置编译./configure --prefix=/home/light/dropbear068 CC=armv7l-timesys-linux-gnueabi-gcc --host=arm makemake scparm-linux-gcc-strip dropbeararm-li原创 2016-05-30 11:30:54 · 2065 阅读 · 0 评论 -
linux进程间的通信: 信号量
一、信号量简介信号量: 用于管理对资源的访问。荷兰计算机科学家Edsger Dijkstra提出的信号量概念是在并发编程领域迈出的重要一步。信号量是一个特殊的变量,它只取正数值,并且程序对其访问都是原子操作。二、信号量的定义它是一个特殊变量,只允许对它进行等待(wait)和发送信号(signal)这两种转载 2015-12-23 10:56:51 · 671 阅读 · 0 评论 -
linux进程间的通信: 消息队列
一、消息队列(message queue)消息队列也是System V IPC机制之一。消息队列与命名管道类似,但少了打开和关闭管道方面的复杂性。但使用消息队列并未解决我们在使用命名管道时遇到的一些问题,如管道满时的阻塞问题。消息队列提供了一种在两个不相关进程间传递数据的简单有效的方法。与命名管道相比,消息队列的优势在于,转载 2015-12-23 10:54:57 · 591 阅读 · 0 评论 -
linux进程间的通信: 共享内存
一、共享内存介绍共享内存是三个IPC(Inter-Process Communication)机制中的一个。它允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式。大多数的共享内存的实现,都把由不同进程之间共享的内存安排为同一段物理内存。共享内存是由IPC为进程创建一个特殊的地址范围,转载 2015-12-23 10:53:41 · 539 阅读 · 0 评论 -
Linux Frame Buffer 驱动
基本原理通过 framebuffer ,应用程序用 mmap 把显存映射到应用程序虚拟地址空间,将要显示的数据写入这个内存空间就可以在屏幕上显示出来;驱动程序分配系统内存作为显存;实现 file_operations 结构中的接口,为应用程序服务;实现 fb_ops 结构中的接口,控制和操作 LCD 控制器;驱动程序将显存的起始地址和长度传给 LCD 控制器的寄存器 (一般由转载 2015-10-15 13:58:57 · 1695 阅读 · 0 评论 -
Sqlite移植
1.下载最新版的sqlite源码http://www.sqlite.org/download.htmlsqlite-autoconf-3090200.tar.gz2.解压代码tar xzvf sqlite-autoconf-3090200.tar.gz 3.进入目录cd sqlite-autoconf-3090200/4.配置交叉编译器,配置安装路径./config原创 2015-11-06 14:18:55 · 521 阅读 · 0 评论 -
qt-4.8.4在ARM平台上的移植
1.下载源码qt-everywhere-opensource-src-4.8.4.tar.gz2.修改编译器-embeddedarmv7l-timesys-linux-gnueabi,指定Qt的硬件架构。这样QT就会去其配置文件中找与硬件架构相关的信息,配置文件在qt安装目录的~/mkspec/下面,如果用到qws,就在~/mkspec/qws下面。进入该目录,发现其中没有li原创 2015-08-27 20:13:41 · 2074 阅读 · 0 评论 -
DirectFB接口资料
1. 概述 ================ 本文主要研究DirectFB及其向上向下的接口,顺带讲一下QT搭配DirectFB使用的一些笔记。 其他,如DirectFB的内部结构、Qt的内部结构、及其他GUI系统如android不在本文讨论范围内。 本文会设计一些DirectFB的2D加速函数介绍,3D加速不再本文讨论范围内。 =========转载 2015-09-16 15:03:01 · 1030 阅读 · 0 评论 -
DirectFB 1.4.3 在ARM-linux上移植
1.下载源码DirectFB-1.4.3.tar.gz2.解压缩 tar xzvf DirectFB-1.4.3.tar.gz3.进入目录cd DirectFB-1.4.34.automake工具配置,需要系统中包含有automake相关工具配置./autogen.sh 5.参数配置./configure -prefix /usr/local/dFB-1.4.3 -host原创 2015-09-14 14:28:05 · 3579 阅读 · 0 评论 -
QT4.8.4+DirectFB1.4.3
1.QT Embed移植不详细说了2.编译DirectFB。3.在使用到的交叉编译qmakeconf文件中添加DirectFB的库文件和头文件路径QT_CFLAGS_DIRECTFB = -I/usr/local/dFB-1.4.3/include/directfb -D_REENTRANTQT_LIBS_DIRECTFB = -L/usr/local/dFB-1.4.3/lib/原创 2015-09-15 13:56:40 · 1198 阅读 · 0 评论 -
u-boot Makefile -- make xxx_config分析
当我们执行:make xxx_config, 其做了什么工作呢?下面具体分析:举例:make sama5d3xek_nandflash_config[cpp] view plaincopy764 ######################################################################原创 2015-09-11 11:04:53 · 1006 阅读 · 0 评论 -
linux中的热插拔和mdev机制
linux中的热插拔和mdev机制 mdev是busybox自带的一个简化版的udev 作用是在系统启动和热插拔 或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的 mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为"dev"的文件,且文件中包含的是设备号,则mde转载 2015-09-07 16:27:06 · 702 阅读 · 0 评论 -
I.MX6Q(TQIMX6Q/TQE9)学习笔记——U-Boot移植
获取源码根据前一篇文章搭建好LTIB环境后就可以非常方便的导出u-boot源码了。切换到ltib目录,并运行如下指令:[cpp] view plaincopy./ltib -m prep -p u-boot 该指令执行需要一些时间,指令执行完成后Freescale维护的u-boot-2009.8就会出现在rpm/BUIL转载 2015-06-03 14:52:59 · 1558 阅读 · 0 评论 -
U-boot第二阶段分析
一、U-boot第二阶段概述上面有两篇文关于u-boot第一阶段的介绍,这两篇文章是从网上找到的,由于分析的很详细,看完这后觉得对这两篇文章u-boot第一阶段的介绍已经比较完美了,所以分享出来。从这篇文章开始分析u-boot的第二阶段。如果你只把u-boot理解成引导kernel的一段代码的话,u-boot完全没有必要设计成现在这样的一种软件框架,直接写几个文件就能完成k转载 2015-06-03 14:14:46 · 850 阅读 · 0 评论 -
U-boot第一阶段分析
u-boot是在单板刚启动的时候执行的一段程序。其作用是将内核从flash、硬盘等介质上拷贝到内存中,并传递给内核一些启动参数并跳转到内核去执行。由于u-boot的代码非常的依赖于不同的体系结构。对u-boot的分析也只能提炼出不同体系结构的共性,做相应的总结。总的说来,u-boot所做到工作分为两个阶段。第一个阶段是将u-boot第二阶段的代码拷贝到ram空间,跳转到第二阶段代码执行。第转载 2015-06-03 14:12:02 · 644 阅读 · 0 评论 -
使用GDB调试开发板程序
=====================================================================使用GDB调试开发板程序 =====================================================================下载gdb-7.2a.tar.bz2http://ftp.cs.pu.edu原创 2011-11-02 20:39:49 · 2263 阅读 · 0 评论 -
安装Fedora 15后需做的SET
#1,设置sudo在Ubuntu或其他发行版本下用惯sudo,我们可以通过下面方式来实现sudo。在命令行下输入# visudo然后,在配置文件中找到下面的几行内容:## Allow root to run any commands anywhere root ALL=(ALL) ALL然后,在上行内容下面添加下面内容转载 2011-10-20 15:02:10 · 894 阅读 · 0 评论 -
GDB 命令详细解释
图形调试界面:insightGDB 命令详细解释 Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。 和所有常用的调试工具一样,gdb提供了以下功能: # 监视程序中变量的值 # 在程序中设置断点 # 程序的单步执行 在使用gdb前,必须先载入可执行文件,转载 2011-11-02 15:27:53 · 719 阅读 · 0 评论 -
Linux驱动程序入门—Hello World
Linux驱动程序入门—Hello World1、引言 记得在学习VC++和C语言的时候,一开始都会以一个HELLO WORLD的例子作为演示,将学者逐渐引入殿堂,这个几乎成了计算机编程语言学习必经的一个入门之路。 当然,在学习linux编程的时候也是这样,下面的例子应该是再熟悉不过了: 首先用VI编写一个C程序:vi hello.c #include转载 2011-10-25 21:11:29 · 1033 阅读 · 1 评论