![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式Linux
文章平均质量分 76
linuxweiyh
这个作者很懒,什么都没留下…
展开
-
Linux下操作超过2GB大文件
参考:gcc -D_FILE_OFFSET_BITS=64参考:What is the difference between _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64?What is the difference between _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64?在头文件之前添加:#define _FILE_OFFSET_BITS 64或者更改编译选项:gcc -D_FILE_OFFSET原创 2020-06-23 21:06:07 · 656 阅读 · 0 评论 -
uboot启动第一阶段——start.S(一)
1. 引入 start.S(1)通过对链接脚本的分析可知,整个程序的入口取决于链接脚本中 ENTRY 声明的地方。在 uboot.lds 中可以看到 ENTRY(_start),因此 _start 就是整个程序的入口,而 _start 所在的文件就是整个程序的起始文件。通过搜索可知,_start 存在 start.S 中,因此 start.S 就是整个程序的起始文件。2. 头文件代码:...原创 2018-09-05 17:56:02 · 2049 阅读 · 0 评论 -
uboot启动第二阶段
1.前言(1)uboot的第一阶段最后跳转到了start_armboot函数,也就是说start_armboot函数就是uboot的第二阶段。start_armboot函数的定义为位于lib_arm/board.c中的444 ~ 908行。(2)uboot在第二阶段应该做什么?在uboot的第一阶段主要完成了SoC内部的一些部件的初始化,例如看门狗、时钟等,以及DDR的初始化,最后完成...原创 2018-09-06 11:02:47 · 1470 阅读 · 0 评论 -
uboot如何启动内核
一、uboot和内核到底是什么1.uboot和内核就是一个裸机程序(1)uboot的本质就是就是一个复杂点的裸机程序,和ARM部分写的裸机程序没有本质区别。(2)内核本身也是一个裸机程序,和uboot、裸机程序无本质区别。要说不同的地方,那就是内核运行起来后,在软件上分为内核层和应用层,分层后两层的权限不同,内存访问和设备操作的管理上更加精细(内核可以随便访问各种硬件,而应用程序只能被...原创 2018-09-12 18:00:02 · 12738 阅读 · 1 评论 -
uboot的命令体系
一、uboot命令体系基础1.uboot命令体系实现代码在哪里(1)uboot命令体系的实现代码在common/cmd_xxx.c中,有若干个.c文件和命令体系有关。(还有command.c、main.c也和命令有关)2.每个命令对应一个函数(1)每一个uboot的命令背后都对应一个函数,这就是uboot实现命令体系的一种思路和方法。(2)要找到每一个命令背后所对应的那个函数,...原创 2018-09-13 11:42:47 · 913 阅读 · 0 评论 -
uboot的环境变量
一、前言uboot启动第二阶段与env相关的uboot启动第二阶段与env有关的函数有两个:env_init(common/env_movi.c)、env_relocate(common/env_common.c)。env_init函数定义(代码:37 ~82行)#ifdef ENV_IS_EMBEDDEDextern uchar environment[];env_t *e...原创 2018-09-13 18:46:48 · 952 阅读 · 0 评论 -
Ubuntu16.04 64位系统使用32位交叉编译器的问题
转载地址:https://blog.csdn.net/ghty520/article/details/79251683 在ubuntu16.04的64位系统上安装32位交叉编译工具链,建好软连接后,发现无法使用,显示No such file or directory。解决方法:sudo apt-get install libc6:i386安装完成后,测试可用。后来有发现其它解决方式...转载 2018-10-02 20:05:23 · 3085 阅读 · 1 评论 -
uboot的硬件驱动
uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬件的那部分代码叫驱动)。(2)裸机程序是直接操控硬件的,操作系统必须通过驱动来操控硬件。这两个有什么区别?本质区别就是分层。2.uboot虚拟地址对硬件操作的影响(1)操作系统(指的是linux)下MMU肯定是开启的,也就是说linux驱动中使用...原创 2018-09-21 17:24:04 · 1417 阅读 · 0 评论 -
终端的CTRL+S 解说
在很多类Unix 的系统上,Ctrl-S 都有特殊的含义:它会“冻结”终端(它曾经被用来暂停快速滚动)。因为“保存”一般也是用这个快捷键,所以经常会有人不假思索地按下这个快捷键,结果大多数人都会被搞糊涂(我也经常犯这个错误)。解冻终端是用Ctrl-Q,所以如果你忽然发觉终端看起来被冻结了,试一下Ctrl-Q,看能不能释放它。...转载 2018-10-12 09:48:58 · 4165 阅读 · 0 评论 -
嵌入式Linux下实现U盘、SD卡自动挂载功能
在嵌入式Linux中我们经常用到U盘、SD卡等存储设备,每次手动挂载或卸载非常麻烦,因此可以采用以下方法实现它们的自动挂载或卸载:1、 首先在 /etc/init.d/rcS 中加入以下语句echo /sbin/mdev > /proc/sys/kernel/hotplug2、在 /etc 目录下建立 medv.conf 的文件,并输入以下内容sd[a-z][0-9] ...原创 2018-10-19 13:47:55 · 4157 阅读 · 3 评论 -
话说linux内核
内核和驱动、内核和应用程序、内核和文件系统的关系内核和驱动的关系:(1)驱动属于内核的一部分(2)驱动就是内核中的硬件设备管理模块、(3)驱动工作在内核态(4)驱动程序故障可能会导致整个内核崩溃(5)驱动程序漏洞会使内核不安全内核的应用程序的关系:(1)应用程序不属于内核,而是在内核之上的(2)应用程序工作在用户态,是受限制的(3)应用程序故障不会导致内核崩...原创 2018-10-22 20:43:08 · 153 阅读 · 0 评论 -
linux内核源码目录结构
linux内核源码目录结构如下所示:(1)KbuildKbuild是Kernel build的意思,就是内核编译的意思,这个文件就是linux内核特有的内核编译体系需要用到的文件。(2)Makefile这个是linux内核的总Makefile,整个内核工程是用这个Makefile来管理的。(3)mk这个文件是九鼎在移植时自己添加的,不是linux内核本身的东西。九鼎添加...原创 2018-10-23 10:31:52 · 6866 阅读 · 0 评论 -
linux内核配置原理
linux内核配置的关键是得到.config文件。(1).config以 . 开头,是一个隐藏文件,平时看不到,需要使用ls -a查看(2)默认情况下(或执行make distclean以后)是没有.config文件的,配置的两步就是为了得到内容合适的.config文件。(3).config文件是linux内核在编译过程中很重要的一个文件,其作用类似于uboot中的include/co...原创 2018-10-25 15:14:42 · 781 阅读 · 0 评论 -
linux内核启动过程分析
准备工作 Makefile分析kernel的Makefile写法和规则与uboot的Makefile是一样的,甚至Makefile中的很多内容都是一样的。kernel的Makefile比uboot的Makefile要复杂,在这里不需要一行一行的详细分析,只需要关注在配置编译过程需要用到的地方,其他的地方可以不管。(1)Makefile开始定义了kernel的版本号,这个版本号很重要...原创 2018-10-30 09:36:45 · 6084 阅读 · 3 评论 -
linux内核配置、编译
环境系统:Ubuntu 16.04内核:Linux 2.6.35.7 配置和编译1.修改Makefile(1)修改交叉编译工具链CROSS_COMPILE ?= /home/linuxwei/toolchain/arm-2009q3/bin/arm-none-linux-gnueabi-(2)修改架构ARCH ?= arm2.配置第一步:执行mak...原创 2018-10-24 21:14:14 · 197 阅读 · 0 评论 -
根文件系统的原理
根文件系统概述1.为什么需要根文件系统(1)init进程的应用程序在根文件系统上(2)根文件系统提供了根目录/(3)内核启动后的应用层配置(/etc)在根文件系统上,可以这么认为:发行版=内核+rootfs(4)shell命令程序在根文件系统上,例如ls、cd等总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(/etc下的配置文件、/bin等目录下的s...原创 2018-10-30 14:22:58 · 721 阅读 · 0 评论 -
Linux杂谈
1. make installmake install在所有的linux的软件中的作用是安装软件。在传统的linux系统中,安装软件时都是选择源代码方式安装,然后配置、编译、安装。make install的目的是就是将编译生成的可执行文件及其依赖的库文件、配置文件、头文件安装到当前系统中指定的目录中(一般可以指定,如果不指定会有默认目录。)...原创 2018-11-10 17:50:53 · 152 阅读 · 0 评论 -
汇编文件 .s 和 .S 区别
转载地址:https://blog.csdn.net/ultraman_hs/article/details/53411728 .s 汇编语言源程序; 操作: 汇编.S汇编语言源程序; 操作: 预处理 + 汇编-------------------------------------------------------------------------------------...转载 2018-09-11 20:02:02 · 4623 阅读 · 0 评论 -
uboot启动总结及移植注意
1. 启动过程总结(1)第一阶段为汇编阶段、第二阶段为C阶段(2)第一阶段在SRAM中、第二阶段在DRAM中(3)第一阶段注重SoC内部、第二阶段注重SoC外部(Board内部) 2. 移植时的注意点(1)x210_sd.h头文件中的宏定义(2)特定硬件的初始化函数位置(譬如网卡)...原创 2018-09-11 19:07:48 · 371 阅读 · 0 评论 -
uboot启动第一阶段——start.S(二)
1. 设置 CPU 为 SVC 模式代码:141 ~ 149 行reset: /* * set the cpu to SVC32 mode and IRQ & FIQ disable */ @;mrs r0,cpsr @;bic r0,r0,#0x1f @;orr r0,r0,#0xd3 @;msr cpsr,r0 msr cpsr_c, #0xd3 @ I...原创 2018-09-04 17:19:22 · 1112 阅读 · 0 评论 -
在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
转载地址:http://blog.csdn.net/thinkerleo1997/article/details/52412042在编译嵌入式Linux内核时出现了以下错误提示:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl li转载 2017-11-01 14:27:33 · 282 阅读 · 0 评论 -
Makefile中的-C和M=解析
转载地址:http://blog.csdn.net/xiaowulang20082008/article/details/50586985在进行嵌入式开发过程中,经常需要编写和运行Makefile,且在大型项目开发过程中,一般也都是使用Makefile来进行管理、编译、运行的,所以对Makefile的读写是嵌入式软件工程师必须具备的基本能力。Makefile中,特别是在转载 2017-11-02 11:59:05 · 4332 阅读 · 0 评论 -
Linux 内核延时
短延时Linux 内核中提供了以下 3 个函数分别进行纳秒、微妙和毫秒延迟:void ndelay(unsigned long nsecs);void udelay(unsigned long usecs);void mdelay(unsigned long msecs);上述延迟的实现原理本质上是忙等待,它根据 CPU 频率进行一定次数的循环。注意:毫秒延时(以及更大的秒原创 2018-01-22 16:52:00 · 820 阅读 · 0 评论 -
Linux 内核定时器
Linux 内核定时器软件意义上的定时器最终依赖硬件定时器实现,内核在时钟中断发生后检测各定时器是否到期,到期后的定时器处理函数将作为软中断在底半部执行。实质上,时钟中断处理程序会唤起 TIMER_SOFTIRQ 软中断,运行当前处理器当上到期的所有定时器。1. timer_list在 Linux 内核中,timer_list 结构体的一个实例对应一个定时器,代码如下所示:stru原创 2018-01-22 16:57:42 · 270 阅读 · 0 评论 -
Linux 内核模块
Linux 内核模块程序结构:(1)模块加载函数(2)模块卸载函数(3)模块许可证声明(4)模块参数(5)模块导出符号(6)模块作者等信息声明模块加载函数一般以 __init 标识在 Linux 中,所有标识为 __init 的函数如果直接编译进内核,成为内核镜像的一部分,在连接的时候都会放在 .init.text 这个区段内。所有的 __init 函数在区段 .initcall.init中还保存...原创 2018-01-05 17:14:57 · 229 阅读 · 0 评论 -
Linux 申请内存
在用户空间动态申请内存在用户空间中动态申请内存的函数为 malloc(),这个函数在各种操作上的使用都是一致的。与之对应的释放函数为 free()。对于 Linux 而言,C 库的 malloc() 函数一般通过 brk() 和 mmap() 两个系统调用从内核申请内存。在内核空间动态申请内存在 Linux 内核空间中申请内存涉及的函数主要包括 kmalloc()、__ge原创 2018-01-23 12:47:05 · 3473 阅读 · 0 评论 -
编译乱序和执行乱序
编译乱序编译器可以对访存的指令进行乱序,减少逻辑上不必要的访存,以及尽量提高 Cache 命中率和 CPU 的 Load/Store 单元的工作效率。因此在打开编译器优化以后,有时会看到生成的汇编码并没有严格按照代码的逻辑顺序。解决编译乱序问题,需要通过 barrier() 编译屏障进行。可以在代码中设置 barrier() 屏障,这个屏障可以阻挡编译器的优化。对于编译器来说,设置编译原创 2018-01-23 15:22:51 · 1787 阅读 · 0 评论 -
Linux 文件系统与设备驱动
1. Linux中虚拟文件系统、磁盘/Flash文件系统及一般的设备文件与设备驱动之间的关系,如下图所示:应用程序和 VFS 之间的接口是系统调用,而 VFS 与文件系统以及设备文件之间的接口是 file_operations 结构体成员函数,这个结构体包含对文件进行打开、关闭、读写、控制的一系列成员函数。2. 字符设备的访问由于字符设备的上层没有类似于磁盘的 ext2 等文件系统,所以字符设备...原创 2018-01-10 10:33:45 · 1462 阅读 · 0 评论 -
platform 设备驱动
1. platform 总线、设备与驱动 在嵌入式系统里面,在 SoC 系统中集成的独立外设控制器、挂接在 SoC 内存空间的外设等却不依附于此类总线。基于这一背景,Linux 发明了一种虚拟的总线,称为 platform 总线,相应的设备称为 platform_device,而驱动称为 platform_driver。 注意:所谓的 platform_device 并不是与字符设备、...原创 2018-02-26 11:43:17 · 346 阅读 · 0 评论 -
Linux 字符设备驱动
1. cdev 结构体(1)在 Linux 内核中,使用 cdev 结构体描述一个字符设备,定义如下:struct cdev { struct kobject kobj; /* 内嵌的 kobject 对象 */ struct module *owner; /* 所属模块 */ const struct file_operations *ops; /* 文件操作结构体 *...原创 2018-02-27 10:03:53 · 179 阅读 · 0 评论 -
Linux file 结构体和 inode 结构体
在设备驱动程序中,一般需要关心两个结构体:file 和 inode。1. file 结构体file 结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。注:在内核和驱动源代码中,struct file 的指针通常被命名为 file 或 filp(...原创 2018-02-27 11:06:11 · 2285 阅读 · 0 评论 -
Linux RTC 驱动模型分析
RTC(实时时钟)借助电池供电,在系统掉电的情况下依然可以正常计时。它通常还具有产生周期性中断以及闹钟(Alarm)中断的能力Linux 内核把 RTC 用作“离线”的时间与日期维护器。当 Linux 内核启动时,它从 RTC 中读取时间与日期,并在需要时将时间回写到 RTC 芯片。另外,如果 RTC 提供了 IRQ 中断并且可以定时,那么 RTC 还可以作为内核睡眠时唤醒内核的闹钟。应用程序可以...原创 2018-02-27 15:15:01 · 497 阅读 · 0 评论 -
Linux-孤儿进程和僵尸进程(总结)(转)
转载地址:https://www.cnblogs.com/JohnABC/p/5734571.html1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2...转载 2018-08-03 14:28:10 · 145 阅读 · 0 评论 -
uboot链接文件uboot.lds解析
uboot.lds文件放在 board/samsung/x210 目录下。解析如下:/* 指定输出文件格式:32位efl格式、arm指令、小端格式 */OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")/* 指定输出文件平台:arm */OUTPUT_ARCH(arm) ...原创 2018-09-04 11:11:35 · 1376 阅读 · 0 评论 -
嵌入式Linux之安装交叉编译工具链
1.交叉编译工具链的选择 选择的原则是尽量跟所使用的目标平台的官方给出的版本一致。 比如三星官方在开发S5PV210的时候使用的交叉编译工具链是arm-2009q3.tar.bz2,因此我们就选择它。2.交叉编译工具链的安装 小说明:在linux下,一般用户的程序都放到/usr/文件夹下,所以我们的交叉编译工具链就放在/usr/local/arm文件夹下,在/usr/local/下是没有arm原创 2017-11-01 10:10:38 · 1470 阅读 · 0 评论