
ARM Linux开发
文章平均质量分 50
求佛_ce123
专注于嵌入式软件开发
展开
-
理解Linux进程/线程的各种ID
通过Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thread ID)和tgid (thread group ID for the thread group leader)等等,而在Linux库函数和系统调用里也许你注意到了pthread id和tid等等。还有更多的ID,比如pgrp (process group ID), sid (session ID for the session leader)和 tpgid (tty process gr原创 2021-07-25 22:44:06 · 2725 阅读 · 1 评论 -
嵌入式linux开发中gcc的一些优化编译选项
-Werror编译选项加上-Werror 遇到任何的警告工程将停止编译。-fno-exceptions禁用运行时类型信息。-fno-rtti禁用异常机制,一般只有对程序运行效率及资源占用比较看重的场合才会使用,如果要做这两个的话最好连libstdc++和其他所有的的c++库都用这两个参数重新编译一遍,否则光是你自己的程序禁用了这两个特性,而别的库依然开着,效果就大打折扣了。-fno-threadsafe-statics对于在函数内部声明的static变量,编译器默认是会使得这样.原创 2021-05-12 06:20:51 · 1873 阅读 · 0 评论 -
BUILD_BUG_ON
在分析io_uring源码的时候发现了这个宏,稍微了解了一下static int __init io_uring_init(void){#define __BUILD_BUG_VERIFY_ELEMENT(stype, eoffset, etype, ename) do { \ BUILD_BUG_ON(offsetof(stype, ename) != eoffset); \ BUILD_BUG_ON(sizeof(etype) != sizeof_field(stype, ename));原创 2021-05-10 09:26:22 · 819 阅读 · 0 评论 -
gcc的fmessage-length参数
gnu工具链编译过程中,控制台输出的一行信息是不换行的。当输出信息过长时(如编译错误时的信息),会导致你无法看到完整的输出信息。加入-fmessage-length=0后,输出信息会根据控制台的宽度自动换行,这样就能看全输出信息了。...原创 2021-04-15 20:02:03 · 974 阅读 · 0 评论 -
linux内核中的copy_to_user和copy_from_user(二)—图解__arch_copy_from_user
linux内核中的copy_to_user和copy_from_user(二)—图解__arch_copy_from_userKernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) __arch_copy_from_user函数实现数据的拷贝,当地址没有按4字节对齐,拷贝数据时需要进原创 2013-01-08 16:15:14 · 8822 阅读 · 1 评论 -
linux内核中的文件描述符(二)--socket和文件描述符
linux内核中的文件描述符(二)--socket和文件描述符Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) socket和文件系统紧密相关,我们可以通过文件系统的open、read、write和close等操作socket。下面是一个简单的例子。/*************原创 2013-01-09 10:55:59 · 9058 阅读 · 1 评论 -
linux内核中的文件描述符(三)--fd的回收
linux内核中的文件描述符(三)--fd的回收Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123)1.close函数上图说明了close(fd)的执行过程,主要包括两部分:释放文件描述符fd,关闭文件file。//fs/open.casmlinkage long sys_clo原创 2013-01-10 08:29:50 · 14139 阅读 · 0 评论 -
linux内核中的文件描述符(四)--fd的分配--get_unused_fd
linux内核中的文件描述符(四)--fd的分配--get_unused_fdKernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 在linux内核中主要有两个函数涉及到文件描述符的分配:get_unused_fd和locate_fd。本文主要讲解get_unused_fd,将会在原创 2013-01-10 09:23:06 · 8045 阅读 · 2 评论 -
linux内核中的文件描述符(五)--fd的分配--locate_fd
linux内核中的文件描述符(五)--fd的分配--locate_fdKernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 继续上一篇博客的内容,分析另一个文件描述符fd的分配函数locate_fd。dup系统调用用于复制一个文件描述符对应的文件,返回值是个文件描述符。在前面的文章原创 2013-01-10 13:02:15 · 4714 阅读 · 0 评论 -
图解ARM Linux的启动全过程
图解ARM Linux的启动全过程 图解ARM-Linux的启动全过程:内核自解压阶段—>内核引导阶段—>内核初始化阶段—>BusyBox初始化阶段。 图片有点大,打开的时候比较慢。大家可以免费下载http://download.youkuaiyun.com/detail/ce123/4275871。 注意:本图在不断的修改中,本网页中的图是最新的。下载链接中的图不能替换,可能有些错误!原创 2012-05-02 14:07:53 · 30688 阅读 · 40 评论 -
linux内核中的文件描述符(一)--基础知识简介
linux内核中的文件描述符(一)--基础知识简介Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 作为文件的使用者,进程理所当然的要将所使用的文件记录于自己的控制块中,也就是task_struct。另外,由于进程所对应的程序也是一个文件,因此进程控制块还必须记录这个文件的相关原创 2013-01-08 16:31:17 · 6947 阅读 · 1 评论 -
linux内核中的copy_to_user和copy_from_user(一)
linux内核中的copy_to_user和copy_from_user(一)Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123)1.copy_from_user 在学习Linux内核驱动的时候,经常会碰到copy_from_user和copy_to_user这两个函数,设备驱动程原创 2013-01-06 19:45:53 · 65579 阅读 · 4 评论 -
ARM中的预取命令pld的使用
ARM中的预取命令pld的使用Kernel version:2.6.14CPU architecture:ARM920T 最近在分析ARM Linux的copy_from_user,主要功能由__arch_copy_from_user实现,该函数定义在linux/arch/arm/lib/uaccess.S文件中,使用汇编实现,部分源码如下:ENTRY(__arch_copy_from_user)原创 2013-01-06 10:07:16 · 15046 阅读 · 12 评论 -
linux-2.6.14移植:NET: Registered protocol family 1卡住
linux-2.6.14移植:NET: Registered protocol family 1卡住修改好内核源码,并增加了yaffs源码,开始make,出现如下错误:U-Boot 1.1.6 (Mar 21 2012 - 07:03:29)DRAM: 64 MBFlash: 2 MBNAND: 256 MiB*** Warning - bad CRC or NAND, using defa原创 2012-12-19 23:28:09 · 5177 阅读 · 0 评论 -
linux内核中的typeof
linux内核中的typeof内核版本:2.6.14嵌入式开发交流群:289195589,欢迎加入! 今天分析内核时又看到了typeof,只知道它大概是返回变量的类型,后来上网查了下发现这个关键字在linux中用的非常多。如果你对sizeof很熟悉的话,那么大可进行类推,sizeof(exp)返回的是exp的数据类型大小,那么typeof(exp.)返回的就是exp的数据类型。下面是linux内核原创 2013-01-01 23:30:09 · 3974 阅读 · 0 评论 -
make xconfig无法使用
make xconfig无法使用 由于项目需要,需要移植linux-2.6.14版本的内核,PC机上的linux是Ubuntu11.04,在使用make xconfig编译内核时出现如下错误:root@czu:~/桌面/socket/linux-2.6.14# make xconfig HOSTCXX scripts/kconfig/qconf.oIn file included from sc原创 2012-12-19 20:11:53 · 3120 阅读 · 0 评论 -
linux内核中的likely和unlikely
linux内核中的likely和unlikelyKernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123)GCC version:arm-linux-gcc-3.4.1 看内核时经常遇到if(likely( )){}或是if(unlikely( ))这样的语句,不甚了解,例如(选自ker原创 2013-01-11 16:23:56 · 3626 阅读 · 0 评论 -
linux内核中的文件描述符(六)--fd的分配--expand_files
linux内核中的文件描述符(六)--fd的分配--expand_filesKernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 我们先贴出expand_files函数的源码:int expand_files(struct files_struct *files, int nr)原创 2013-01-11 15:34:48 · 5487 阅读 · 0 评论 -
linux内核中的信号机制--信号机制的管理结构
linux内核中的信号机制--信号机制的管理结构Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 信号只是一个数字,数字为0-31表示不同的信号,如下表所示。 编号 信号名 默认动作 说明 1 SIGHUP 进程终止 终端断开连原创 2013-02-07 10:21:13 · 3833 阅读 · 0 评论 -
自己动手实现arm函数栈帧回溯
glic中其实有这些函数,当时用的uclib版本较低,没有这些函数,但又需要,只能自己实现了(较高的版本应该有这些函数,换版本很麻烦),而且可以加深自己对这方面的理解.原理性的东西就不深入讲解了,直接上例子!原创 2013-12-12 22:38:37 · 10305 阅读 · 5 评论 -
linux内核中send与recv函数详解
主要讲解了send与recv函数的参数和基本原理.原创 2013-07-17 16:02:14 · 5578 阅读 · 0 评论 -
linux内核中memcpy和memmove函数的区别和实现
linux内核中memcpy和memmove函数的区别和实现Kernel version:2.6.32CPU architecture:ARMAuthor:ce123(http://blog.youkuaiyun.com/ce123)嵌入式开发交流群:280352802,欢迎您的加入!memcpy是把src指向的对象中的size个字符拷贝到dest所指向的对象中,返回指向结果对象的指针. memmove也原创 2013-06-03 08:20:58 · 15077 阅读 · 3 评论 -
控制linux动态链接库导出函数
控制linux动态链接库导出函数 在linux中,我们可以通过-fvisibility=default|internal|hidden|protected来控制导出函数。 在GCC帮助文档 -fvisibility=default|internal|hidden|protected参数下有这样一段描述:a superior solution made possible by this option原创 2013-04-29 14:05:10 · 3055 阅读 · 0 评论 -
linux内核中的信号机制--从用户层到内核层
linux内核中的信号机制--从用户层到内核层Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123)1.简介 如果进程要处理某一信号,那么要在进程中注册该信号。注册信号主要用来确定信号值及进程针对该信号值的动作之间的映射关系,即进程将要处理哪个进程和该信号被传递给进程时,将执行何种操原创 2013-02-23 08:17:22 · 5100 阅读 · 3 评论 -
linux内核中的信号机制--信号处理
linux内核中的信号机制--信号处理Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 当进程被调度时,会调用do_notify_resume()来处理信号队列中的信号。信号处理主要就是调用sighand_struct结构中对应的信号处理函数。do_notify_resume(原创 2013-02-21 22:04:59 · 14775 阅读 · 7 评论 -
linux内核中的信号机制--信号发送
linux内核中的信号机制--信号发送Kernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.youkuaiyun.com/ce123) 应用程序发送信号时,主要通过kill进行。注意:不要被“kill”迷惑,它并不是发送SIGKILL信号专用函数。这个函数主要通过系统调用sys_kill()进入内核,它接收两个参数: 第一个原创 2013-02-07 10:30:28 · 6520 阅读 · 0 评论 -
linux内核中的信号机制--一个简单的例子
linux内核中的信号机制--一个简单的例子Author:ce123(http://blog.youkuaiyun.com/ce123) 信号机制是类UNIX系统中的一种重要的进程间通信手段之一。我们经常使用信号来向一个进程发送一个简短的消息。例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置为可中断等待状态(TASK_IN原创 2013-02-04 09:57:37 · 4667 阅读 · 0 评论 -
linux内核编译错误:error: read-only variable '__r2' used as 'asm' output
linux内核编译错误:error: read-only variable '__r2' used as 'asm' output内核版本:2.6.14交叉编译器:arm-linux-gcc 4.3.3错误:arch/arm/mm/alignment.c: In function 'proc_alignment_write':arch/arm/mm/alignment.c:119: error:原创 2012-12-19 20:24:45 · 4424 阅读 · 0 评论 -
linux内核中的get_user和put_user
linux内核中的get_user和put_user内核版本:2.6.14CPU平台:arm嵌入式开发交流群:289195589,欢迎加入! 在内核空间和用户空间交换数据时,get_user和put_user是两个两用的函数。相对于copy_to_user和copy_from_user(将在另一篇博客中分析),这两个函数主要用于完成一些简单类型变量(char、int、long等)的拷贝任务,对于一原创 2013-01-03 21:35:04 · 33711 阅读 · 0 评论 -
ARM Linux下访问GPIO端口
GPIO(GeneralPurpose Input/Output的缩写)就是芯片的引脚,引脚是可编程的可对引脚的工作模式进行设置:输入模式(检测输入信号),输出模式(输出0或1),高阻状态(常用于AD转换),还有禁止或允许上内部下拉电阻(上拉:管脚通过电阻接高电平,下拉:管脚通过电阻接地,也可以外部接上拉或下拉电阻),还有管脚复用等功能,即通过对内部寄存器的设置使引脚既可以工作在一般模式,作为普通原创 2011-07-02 22:25:57 · 10737 阅读 · 0 评论 -
嵌入式Linux驱动程序开发
嵌入式Linux驱动程序开发1.设备驱动程序的概念... 22.处理器与设备间数据交换方式... 221.查询方式... 22.2.中断方式... 32.3.直接访问内存(DMA)方式... 33.驱动程序结构... 33.1一个设备驱动程序模块的基本框架... 43.1. file_operations结构体... 53.2.inode{}和file{}结构体... 54.设备注册和初始化...原创 2011-07-03 01:04:34 · 10230 阅读 · 8 评论 -
/bin/sh: can't access tty; job control turned off
/bin/sh: can't access tty; job control turned off问题 最近在做嵌入式文件系统时使用了如下的inittab文件:#/etc/inittab::sysinit:/etc/init.d/rcS::respawn:-/bin/shs3c2410_serial0::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::sh原创 2012-04-30 21:01:00 · 12411 阅读 · 0 评论 -
Ubuntu11.10安装BusyBox:致命错误: curses.h:没有那个文件或目录
问题: root@czu:~# cd /root/桌面/busybox-1.19.3root@czu:~/桌面/busybox-1.19.3# make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/split-includescripts/basic/split-include.c: 在函数‘main’中:scri原创 2012-02-01 14:40:31 · 7646 阅读 · 0 评论 -
Linux系统对IO端口和IO内存的管理
Linux系统对IO端口和IO内存的管理一、I/O端口 端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。二、IO内存原创 2012-01-16 11:03:26 · 14232 阅读 · 6 评论 -
制作jffs2镜像文件
下载:ftp://sources.redhat.com/pub/jffs2/mkfs.jffs2或者使用命令:apt-get install mtd-utils命令使用实例:mkfs.jffs2 -s 0x1000 -e 0x40000 -p 0x500000原创 2011-09-28 11:30:31 · 2935 阅读 · 0 评论 -
嵌入式资源网站
嵌入式资源网站一 、MailList1.MailList大全网址:http://news.gmane.org/描述:可以查到绝大部分开源项目的Maillist记录,如bluez、uboot等。碰到问题可以在里面搜索一下,相当方便。二、技术论转载 2011-08-27 10:18:41 · 3037 阅读 · 2 评论 -
udev入门
udev入门第一、什么是udev? udev很简单!嵌入式的udev应用尤其简单。 第二、为什么udev要取代devfs? 这是生产关系适应生产力的需要,udev好,devfs坏,用好的不用坏的。 udev是硬件平台无关的,属于us原创 2011-08-24 14:41:54 · 3178 阅读 · 0 评论 -
linux内核启动流程
Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码,主要作用是检查CPU ID, Architecture Type,初始化BSS等操原创 2011-08-23 20:11:29 · 8976 阅读 · 4 评论 -
在ARM中使用Ramdisk
在ARM中使用RamdiskLinux启动时,initrd可以在内存中,也可以在 Flash或其它可用的设备上;initrd文件格式为: romfs/Minix/ext2/gzip;相关的函数:drivers/block/rd.c: identify_ramdisk_im原创 2011-09-08 15:16:42 · 3461 阅读 · 1 评论 -
阅读源码的好网站
http://lxr.free-electrons.com/source/?a=arm对函数、变量等可以很好的跟踪,非常方便!原创 2011-09-01 20:34:38 · 4795 阅读 · 0 评论