首页
学习
活动
专区
工具
TVP
发布

人人都是极客

专栏作者
495
文章
820181
阅读量
173
订阅数
常见图像格式总结
raw数据是sensor输出的原始数据,一般有raw8, raw10, raw12等,分别表示一个像素点有8bit、10bit、12bit数据。是sensor将光信号转化为电信号时的电平高低的原始记录,单纯地没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。
刘盼
2023-09-11
9650
为U-boot 添加新的board
uboot需要支持众多的硬件,并且具有良好的可扩展性、可移植性和可维护性,因此必须要有一个设计良好的代码架构。代码架构的设计总是与软硬件架构密不可分的,在硬件层面嵌入式系统的核心一般包括以下层次:
刘盼
2023-01-05
1.2K2
Uboot 大全 | uboot 启动流程(二)
uboot在初始化完成后会为用户提供一个命令行交互接口,用户可通过该接口执行uboot定义的命令,以用于查看系统状态,设置环境变量和系统参数等。为了方便对硬件和驱动的管理,uboot还引入了类似linux内核的设备树和驱动模型特性。当然,为了增加系统的可配置性、可调试性以及可跟踪性等,它还支持环境变量、log管理、bootstage统计以及简单的ftrace等功能。下面将对这些特性做一简单的介绍。
刘盼
2023-01-05
1.4K0
Linux内存管理:memblock
内存管理是操作系统内核中最复杂的部分之一, start_kernel函数在内核启动第一个init进程前初始化了所有的内核特性(包括那些依赖于不同架构的特性),你也许还记得引导时创立的临时页表,但复杂的内存管理部分还没有开始,当start_kernel函数被调用时,我们会看到初期内存管理到更复杂的内存管理数据结构和技术的转变,为了更好的理解内核的初始化过程,我们需要对这些技术有更清晰的理解,今天我们会着重讨论这个过程,主要针对初期的内存管理memblock的介绍。
刘盼
2023-01-05
1.8K0
人人极客专访 | 我和我们的操作系统
最早通过陈老师的分享认识了自成,没想到他也关注了【人人极客社区】,今天他给大家介绍一下xbook的昨天,今天和明天。
刘盼
2023-01-05
3970
链接加载原理及ELF文件格式
作者简介: 伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享。 原理概述 为什么要研究链接和加载?写一个小的main函数用户态程序,或者是一个小的内核态驱动ko,都非常简单。但是这一切都是在gcc和linux内核的封装之上,你只是实现了别人提供的一个接口,至于程序怎样启动、怎样运行、怎样实现这些机制你都一无所知。接着你会对程序出现的一些异常情况束手无策,对内核代码中的一些用法不能理解,对makefile中的一些实现不知所云。所以这就是我们
刘盼
2022-09-27
9850
万字整理 | 深入理解编译系统
作者简介: 程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。 一、编译系统的形成与发展 1.1 手工硬件编程 1.2 面向硬件编程 1.3 高级语言编程 1.4 编译系统的组成 二、编译系统的逻辑结构 2.1 狭义编译 2.2 最狭义编译 2.3 链接过程 2.4 组建系统 三、编译原理简介 3.1 词法分析 3.2 语法分析 3.3 语义分析 3.4 中间码生成 3.5 中间码优化 3.6 机器码生成 3.7 机器码优化 3.8 小型编译器推荐 四、静态链接与动态链接 4.1 静
刘盼
2022-08-26
5890
含大量图文解析及例程 | Linux下的ELF文件、链接、加载与库(中)
可执行文件的装载 进程和装载的基本概念的介绍 程序(可执行文件)和进程的区别 程序是静态的概念,它就是躺在磁盘里的一个文件。 进程是动态的概念,是动态运行起来的程序。 现代操作系统如何装载可执行文件 给进程分配独立的虚拟地址空间 将可执行文件映射到进程的虚拟地址空间(mmap) 将CPU指令寄存器设置到程序的入口地址,开始执行 可执行文件在装载的过程中实际上如我们所说的那样是映射的虚拟地址空间,所以可执行文件通常被叫做映像文件(或者Image文件)。 可执行ELF文件的两种视角 可执行ELF格式具有不寻常的
刘盼
2022-08-26
2.1K0
含大量图文解析及例程 | Linux下的ELF文件、链接、加载与库(上)
常用工具 我们首先列出一些在接下来的介绍过程中会频繁使用的分析工具,如果从事操作系统相关的较底层的工作,那这些工具应该再熟悉不过了。不熟悉的读者可以先看一下这里的简单的功能介绍,我们会在后文中介绍一些详细的参数选项和使用场景。 另外,建议大家在遇到自己不熟悉的命令时,通过 man 命令来查看手册,这是最权威的、第一手的资料。 ELF文件详解 ELF文件的三种形式 在Linux下,可执行文件/动态库文件/目标文件(可重定向文件)都是同一种文件格式,我们把它称之为ELF文件格式。虽然它们三个都是ELF文件格式
刘盼
2022-07-27
1.8K0
自动驾驶公司高薪急招 | 系统性能优化/系统开发工程师
公司介绍 轻舟智航(QCraft)是一支始创于硅谷的全华人团队,也是世界前沿的无人驾驶公司,致力于打造适应城市复杂交通环境的“老司机”,将无人驾驶带进现实。 以大规模智能仿真系统为核心能力,轻舟智航推出了专注城市复杂交通场景的无人驾驶方案“Driven-by-QCraft”,旨在助力合作伙伴打造城市无人驾驶移动空间,助推城市交通向全面智能化、网联化升级。作为国内Robo-Bus的领跑者,轻舟智航已在多个城市部署轻舟无人小巴,并率先在苏州启动常态化运营的5G无人公交项目。除了轻舟无人小巴,“Driven-by
刘盼
2022-03-04
4850
驱动加载的本质
内核启动的过程中会通过函数 do_initcalls,将按顺序从 __initcall_start 开始,到 __initcall_end 结束的 section 中以函数指针的形式取出这些编译到内核的驱动模块中初始化函数起始地址,来依次完成相应的初始化。这些初始化函数由 __define_initcall(level,fn) 指示编译器在编译的时候,将这些初始化函数的起始地址值按照一定的顺序放在这个section中。
刘盼
2021-12-01
1.2K0
BPF之巅:洞悉Linux系统和应用性能
BPF是近年来Linux 系统技术领域一个巨大的创新。作为 Linux 内核的一个关键发展节点,其重要程度不亚于虚拟化、容器、SDN 等技术。
刘盼
2021-11-04
2.1K0
一文搞懂 | Ftrace 的实现原理
以 blk_update_request 为例,看下其开启 Ftrace 前后的反汇编代码:
刘盼
2021-09-17
1.2K0
Linux内核中dev_info、dev_dbg、dev_err及动态调试
目前在kernel驱动代码中,都不再建议直接使用printk直接添加打印信息,而是使用dev_info,dev_dbg,dev_err之类的函数代替,虽然这些dev_xxx函数的本质还是使用printk打印的,但是相比起printk:
刘盼
2021-04-29
6.1K0
嵌入式Linux系统移植的四大步骤(详细长文,慎入!)
最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命令就可以完成非常复杂的功能,可是我们有没有想过,为什么会有这样的效果?如果没有去追问,只是机械地完成,并且看到实验效果,这样做其实并没有真正的掌握系统移植的本质。
刘盼
2021-02-12
4.1K0
eBPF在android上的使用
eBPF是extended BPF的缩写,而BPF是Berkeley Packet Filter的缩写。对linux网络比较熟悉的伙伴对BPF应该比较了解,它通过特定的语法规则使用基于寄存器的虚拟机来描述包过滤的行为。比较常用的功能是通过过滤来统计流量,tcpdump工具就是基于BPF实现的。而eBPF对它进行了扩展来实现更多的功能。
刘盼
2021-02-12
4.1K0
如何调整Linux内核启动中的驱动初始化顺序?
如何调整Linux内核启动中的驱动初始化顺序? 【问题】 此处我要实现的是将芯片的ID用于网卡MAC地址,网卡驱动是enc28j60_init。 但是,读取芯片ID的函数,在as352x_afe_init模块中,所以要先初始化as352x_afe_init。 此处,内核编译完之后,在生成的system.map中可以看到, enc28j60_init在as352x_afe_init之前,所以,无法去读芯片ID。 所以我们的目标是,将as352x_afe_init驱动初始化放到enc28j60_init之前, 然后才能读取芯片ID,才能用于网卡初始化的时候的,将芯片ID设置成网卡MAC地址。 【解决过程】 【1】 最简单想到的,是内核里面的 arch\arm\mach-as352x\core.c 中,去改devices设备列表中的顺序。 enc28j60_init对应的是ssp_device,因为网卡初始化用到的是SPI驱动去进行和通讯的。 as352x_afe_init对应的是afe_device。 原先是:
刘盼
2020-04-13
3.9K0
单片机开发与Linux开发有何不同?
针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发,针对不同种类的软件开发,有其不同的特点。 今天我们来看看ARM-Linux开发和MCU开发的不同点,以及ARM-Linux的基本开发环境。
刘盼
2020-02-21
2K0
动手定制一个开发板案例
前面通过学习总线、设备、驱动模型知识后,知道了设备和驱动之间都是通过总线进行绑定而匹配的;然后通过设备树的深入探究,知道了设备树的出现大大增加了驱动的通用性;接着我们一起看了 Linux 的启动流程和设备在内核里一层一层的展开。
刘盼
2020-02-13
1K0
华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破
在华为春季发布盛典上,除了“HUAWEI P30”还有一个词也火了一把,那就是全新黑科技——“华为方舟编译器”!
刘盼
2019-05-13
3800
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档