嵌入式Linux
文章平均质量分 96
tilblackout
Get a life!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux内核学习:目录结构、配置、编译和常用Shell命令
Linux是一种开源的类Unix操作系统内核,它由LinusTorvalds在1991年创建。Linux操作系统是基于Unix设计理念的,旨在提供一个稳定、可靠、安全且高度可定制的操作环境。内核:Linux内核是操作系统的核心,负责管理系统的资源和提供基本的硬件控制。它是开源的,可以根据需要进行定制和修改。开源:Linux采用开源模型,意味着其源代码是公开可用的。这使得用户可以自由查看、修改和分发系统的源代码。多用户和多任务:Linux支持多用户环境,多个用户可以同时使用系统。原创 2024-02-22 07:00:00 · 1602 阅读 · 0 评论 -
U-Boot学习(7):内核启动之bootz启动zImage源码分析
在上一节中,我们分析了,最后就是进入U-Boot的命令行中执行了,如果用户没有任何操作,则经过固定延时后将执行默认的bootcmd环境变量里的指令,那这里面肯定就是启动内核了。在中,我们知道最后执行的应该是bootz指令,那本节就来看一下这个指令如何启动内核的。原创 2024-01-31 07:00:00 · 1906 阅读 · 0 评论 -
U-Boot学习(6):初始化之_main函数源码分析
ARM中函数使用到的全局变量,会在每个函数的最后留一段内存空间来保存使用到的变量的地址。如果我们要让重定位后的代码可以正常访问全局变量的话,我们只需要修改函数最后这段内存空间里对应的全局变量的地址,给这个地址加上重定位偏移即可。原创 2024-01-30 07:00:00 · 2309 阅读 · 0 评论 -
U-Boot学习(5):系统初始化之start.S文件源码分析
最后程序就跳转到_main(在中)函数执行。我们知道U-Boot最后就是执行一个命令行程序,然后可以跳转到内核执行。这正是在_main中要完成的操作。下一篇文章我们继续分析。原创 2024-01-25 07:00:00 · 1715 阅读 · 0 评论 -
位置无关码PIC详解:原理、动态链接库、代码重定位
本文解释了什么是位置无关代码,以及它如何帮助创建具有可共享只读文本段的共享库。位置无关代码(PIC)通过引入全局偏移表(GOT)和过程链接表(PLT)实现,解决了共享库加载时的重定位问题。GOT提供了数据和函数的间接引用,PLT实现了懒绑定,推迟函数地址的解析。当然这也伴随额外的内存加载和寄存器使用成本,但在权衡之下,现代的编译器都更倾向于使用PIC。原创 2024-01-23 07:00:00 · 6971 阅读 · 0 评论 -
U-Boot学习(4):u-boot.lds链接脚本分析
lds链接脚本基础与例子分析。SECTIONS {......secname和contents是必须的,前者用来命名这个段,后者用来确定代码中的什么部分放在这个段中。start:段重定位地址,也称为VMA,即运行地址。如果代码中有位置相关的指令,程序在运行时,这个段必须放在这个地址上。:虽然start指定了运行地址,但是仍可以使用BLOCK(align)来指定对齐的要求一这个对齐的地址才是真正的运行地址。(NOLOAD):用来告诉加载器,在运行时不用加载这个段。原创 2024-01-17 07:00:00 · 2500 阅读 · 0 评论 -
U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig
1、在U-Boot的defconfig文件中,配置项之间存在依赖关系。当你在defconfig文件中启用或禁用某个配置项时,可能会触发相关的配置项引申或取消。在defconfig文件中,一些配置项可能有直接的依赖关系。这意味着启用或禁用一个配置项可能会导致与之直接相关的其他配置项的状态发生变化。这通常是通过配置项的名称来指定的。有些配置项可能存在间接的依赖关系。这意味着启用或禁用一个配置项可能会触发一系列的配置项状态变化,这些变化可能是由于其他配置项的依赖关系而产生的。所以在生成的.config。原创 2024-01-16 07:00:00 · 3514 阅读 · 1 评论 -
U-Boot学习(2):U-Boot编译和.config配置文件生成分析
上一节中,介绍了如何使用U-Boot。我们知道一个U-Boot可能要适配不同的硬件,所以不同的硬件就有不同的配置,配置后就可以编译U-Boot,最终生成镜像。U-Boot如何编译,以什么规则编译,编译后下载到内存中的哪里呢,这一切都在Makefile中。所以本节课就来分析一下U-Boot的Makefile的结构。原创 2024-01-11 07:00:00 · 4746 阅读 · 0 评论 -
U-Boot学习(1):简介及命令行指令详解
U-Boot是一个开源的引导加载程序,主要用于嵌入式系统和嵌入式设备。它被设计成通用的,能够在多种处理器架构上运行,如ARM、MIPS、x86等。U-Boot的主要功能是加载并启动操作系统内核,最常见的是Linux内核。当嵌入式设备上电或者复位时,处理器会从固定地址处的启动ROM(Boot ROM)中开始执行代码。启动ROM的主要任务是初始化系统的基本硬件,如时钟、内存控制器等,并加载U-Boot引导加载程序到RAM中。一旦U-Boot加载到RAM中,它就开始执行。原创 2024-01-10 07:00:00 · 4485 阅读 · 0 评论 -
嵌入式Linux:环境搭建之TFTP、NFS、SSH和FTP的安装和使用
NFS(网络文件系统,)是一种分布式文件系统协议,允许我们挂载远程的目录。这让我们能够管理不同位置的存储空间,多个客户端也可以更改这个空间。我们在开发的过程中,如果我们更改了Linux内核或者设备树,就需要重新将镜像烧写到NAND/SD/EMMC等设备中,然后由UBoot拷贝到RAM。这样就很麻烦,我们就可以在UBoot中利用NFS来从远程的主机(如Ubuntu)中加载内核和设备树到开发板的RAM中。原创 2024-01-09 07:00:00 · 2339 阅读 · 0 评论 -
移植QT5.6到JZ2440
参考文章:https://blog.youkuaiyun.com/lizuobin2/article/details/52673494内核:linux2.6.22.6busybox:busybox-1.22.1.tar.bz2交叉编译器:arm-linux-gcc-4.4.3.tar.gz环境:Ubuntu 16.04_x64 LTS1.uImage除了正常配置外,还要修改顶层Makefile的SUBLEVEL = 32,因为编译器不支持这么低的内核版本2.由于内核版本太老,busybox1.22.1不原创 2021-03-20 23:51:18 · 487 阅读 · 2 评论 -
Ubuntu的安装和交叉编译环境的配置
之前在Ubuntu 20.04挂载根文件系统失败,所以感觉还是用16.04的系统稳点:UBUNTU 16.04下载地址安装完后:1.选择服务器镜像为阿里云的,不然下载东西很慢。再更新资源包:sudo apt-get updatesudo apt-get upgrade2.安装vm-tools、vim等工具3.开机时间优化:sudo vim /etc/default/grub然后这样设置:GRUB_TIMEOUT=0GRUB_CMDLINE_LINUX_DEFAULT=""一般这样就原创 2020-08-06 17:54:31 · 1153 阅读 · 0 评论 -
NFS挂载根文件系统过程,NFS挂载失败
先直说我的解决:我在UBUNTU 20.04挂载失败,后又在UBUNTU 16.04挂载成功。所以应该是系统的问题。这里给大家列一下NFS挂载的流程。1.查看有没有安装NFSservice nfs-kernel-server2.安装NFSsudo apt-get install nfs-kernel-server3.我把NFS挂载在/work/rootfs文件夹,把自己的根文件系统放在这个文件夹里。sudo vi /etc/exports#加入下面一行/work/rootfs *(rw原创 2020-08-06 17:11:01 · 956 阅读 · 0 评论 -
物理地址、链接地址、加载地址、虚拟/逻辑地址的区别
由于嵌入式Linux的内容太多了,学的时候经常往后学一点就把前面的忘了,特意做了个笔记。以S3C2440为例进行说明:NAND有256M(数据总线:16),NOR有2M(16),SDRAM有64M(32)NOR启动使用NOR启动时,NOR Flash的基地址为0,片内RAM地址为0x4000,0000CPU读出NOR上第一个指令(前4个字节)执行。读一个执行一个。NAND 启动NAND和CPU之间不是直接连接,而是通过一个NAND Flash控制器连接,所以程序不能再Nand上面运行。使用原创 2020-07-31 19:13:41 · 2508 阅读 · 2 评论
分享