linux
文章平均质量分 63
饭小粒
蓝牙&Android&iOS&EN
展开
-
VIM操作
请记住一个重要的组合键ctrl + w,操作分屏离不开这个组合键(这里的组合键可没有+, 只是Ctrl和 w组合)这里的n(n是要打开的具体文件的数目:1,2,3……(2)学习VIM:首先打开终端,然后输入vimtutor回车,然后进入教程学习。(1)启动VIM:首先打开终端,然后输入vi回车,然后输入i或者a,进入。上面的这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM。上面的这个命令将会左右分割当前打开的文件和新打开的文件 file。按住组合键 Ctrl + w ,然后在按下 s。转载 2022-10-30 16:14:31 · 1052 阅读 · 0 评论 -
上次没砍我的,这次我又来了。看完这篇还不明白Binder你砍我(一)
概述什么是Binder?Binder是Android程序中实现跨进程通信(IPC)的一种方式。指两个进程之间进行数据交换的过程为什么要跨进程通信?因为有进程隔离,进程隔离指的是,一个进程不能直接操作或者访问另一个进程。也就是进程A不可以直接访问进程B的数据。那么如何进行跨进程通信呢?我们都知道,Android系统的内核是Linux,所以我们首先了解一下Linux上是如何实现的把。Linux上的跨进程通信机制在Linux中有这么几种IPC机制,有管道(pipe)、信号(sinal)、消转载 2020-09-10 10:44:14 · 417 阅读 · 2 评论 -
SYSFS中属性文件的建立
1、device中建立属性文件(1)函数调用关系:/**************************************************************/device_create_file sysfs_create_file/*************************************************************/(2)相关的数据结构:1 struct attribute {2 const cha...转载 2020-08-26 10:50:35 · 662 阅读 · 0 评论 -
某Java大佬在地表最强Java企业(阿里)面试总结
目录:一面1.1、HashMap和Hashtable的区别1.2、实现一个保证迭代顺序的HashMap1.3、 说一说排序算法,稳定性,复杂度1.4、 说一说GC1.5、 可以保证的实习时长1.6、 职业规划二面2.1、 自我介绍。2.2、 JVM如何加载一个类的过程,双亲委派模型中有哪些方法?2.3、 HashMap如何实现的?2.4、 HashMap和Concurrent HashMap区别, Concurrent HashMap 线程安全吗, Concurrent HashMap如何保转载 2020-08-25 07:02:06 · 322 阅读 · 0 评论 -
STM32基础入门(二)——STM32入坑指南
文章目录 1. 开发板的选择 2. 开发环境搭建 3. 学习建议 1. 开发板的选择学习STM32,不能绕开的第一件事,那就是开发板。开发板的意义:开发板提供了动手的机会。学习网上课程后,自己动手编程,并下载到开发板中,观察是否与预期结果一致,如果不一致,可以调试寻找原因。试错的经历是学习过程中最宝贵的经历。 开发板提供了足够的资源,包含硬件资源和软件资源。硬件资源,即开发板上自带的LED、蜂鸣器、显示屏、以及其他芯片,可以让我们学习某一部件的时候可以直接上...转载 2020-08-25 06:37:11 · 975 阅读 · 1 评论 -
嵌入式开发之交叉编译程序万能命令_以freetype为例
6.4 交叉编译程序:以freetype为例使用buildroot来给ARM板编译程序、编译库会很简单,以后系统讲解buildroot时再使用buildroot。现在我们还是手工交叉编译freetype,这种方法在编译、安装一些小程序时很有用。6.4.1 程序运行的一些基础知识 编译程序时去哪找头文件? 系统目录:就是交叉编译工具链里的某个include目录; 也可以自己指定:编译时用 “ -I dir ”选项指定。 链接时去哪找库文件? 系统目录:就是交叉编译工具链里的某个转载 2020-08-25 06:33:17 · 468 阅读 · 0 评论 -
Linux cp命令
Linux cp命令主要用于复制文件或目录。语法cp [options] source dest或cp [options] source... directory参数说明:-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f:覆盖已经存在的目标文件而不给出提示。 -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"转载 2020-08-23 21:24:03 · 246 阅读 · 0 评论 -
Linux下配置交叉编译环境arm-none-eabi-gcc
Linux下配置交叉编译环境arm-none-eabi-gcc安装arm-none-eabi-gcc有两种方式,一个是自己下载安装,一个是用apt-get自动下载安装第一种进入官网https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads下载好源代码后,放入安装目录mv gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 /home/xun/tools然后解压转载 2020-08-23 17:09:43 · 1217 阅读 · 0 评论 -
Android之蓝牙驱动开发总结
一Bluetooth基本概念3二AndroidBluetooth架构32.1Bluetooth架构图32.2Bluetooth代码层次结构3三Bluetooth协议栈分析43.1蓝牙协议栈43.2Android与蓝牙协议栈的关系6四Bluetooth之HCI层分析64.1HCI层与基带的通信方式64.2包的分析及研究74.3通信过程的研究与分析8五Bluetooth之编程实现85.1HCI层编程85.2L2CAP层编程115...转载 2020-08-23 14:28:38 · 2404 阅读 · 0 评论 -
UBOOT启动流程
1.关于启动流程1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。 bl0:出厂的时候就固化在irom中一段代码,主要负责拷贝8kb的bl1到s5pv210的一个96kb大小内部sram(Internal SRAM)中运行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以达到16kb,容量的扩增是为了适应bootloder变得越来复...转载 2020-08-22 10:05:27 · 174 阅读 · 0 评论 -
UBOOT启动流程
1.关于启动流程1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。 bl0:出厂的时候就固化在irom中一段代码,主要负责拷贝8kb的bl1到s5pv210的一个96kb大小内部sram(Internal SRAM)中运行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以达到16kb,容量的扩增是为了适应bootloder变得越来复...转载 2020-08-22 08:32:32 · 355 阅读 · 0 评论 -
UBOOT启动流程
1.关于启动流程1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。 bl0:出厂的时候就固化在irom中一段代码,主要负责拷贝8kb的bl1到s5pv210的一个96kb大小内部sram(Internal SRAM)中运行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以达到16kb,容量的扩增是为了适应bootloder变得越来复...转载 2020-08-22 08:30:37 · 587 阅读 · 0 评论 -
UBOOT启动流程
1.关于启动流程1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。 bl0:出厂的时候就固化在irom中一段代码,主要负责拷贝8kb的bl1到s5pv210的一个96kb大小内部sram(Internal SRAM)中运行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以达到16kb,容量的扩增是为了适应bootloder变得越来复...转载 2020-08-22 08:29:11 · 207 阅读 · 0 评论 -
DMA
DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。原理DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这转载 2020-08-22 06:42:47 · 373 阅读 · 0 评论 -
程序员必读:Linux内存管理剖析
现在的服务器大部分都是运行在Linux上面的,所以作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射 内存管理的方式 缺页异常先来看一些基本的知识,在进程看来,内存分为内核态和用户态两部分,经典比例如下:从用户态到内核态一般通过系统调用、中断来实现。用户态的内存被划分为不同的区域用于不同的目的:当然内核态也不会无差别地使用,所以,其划分如下:下面来仔细看这些内存是如何管理的。地址在Linux内部的地址的映射过程为逻辑地址–>线性地转载 2020-08-21 08:17:48 · 138 阅读 · 0 评论 -
psftp文件的上传下载
运行psftp.exe,和PuTTY一样都是直接运行即可。open host.com 用于连接远程linux服务器 cd /usrPub 进入远程Linux服务器上的目录 lcd F:/Download 将本地文件上传的源路径或将服务器文件下载到本地的地址。 put -r f:/kyzon/usrPub将F:/kyzon目录上传至服务器上。(psftp> put -r G:\1.txt /opt/1.txt) get -r /usrPub将服务器上的p...转载 2020-08-21 06:37:37 · 1032 阅读 · 0 评论 -
vs2017搭建linux c++开发环境
最近一直在阅读ovs的源码,看到用户态代码的时候,需要对用户态的代码进行调试,一开始想直接使用linux中的GDB进行调试,但是ovs的工程太过于复杂,从网上找了些文章,发现vs2017能够支持linux c++程序的调试,捣鼓了一下午,遇到了一些坑,终于搭建好了开发环境。最新版的vs 2017支持linux环境编程,与传统vs上的windows编程不同的是,vs2017 所需要的Linux环境需要搭载在一个linux的服务器上,vs 2017 相当于将windows系统和这个linux系统之间建...转载 2020-08-20 15:29:48 · 608 阅读 · 0 评论 -
嵌入式面经111道面试题全解析C/C++可参考
作者:爱打球的程小员许乔丹链接:https://www.nowcoder.com/discuss/441310?type=post&order=time&pos=&page=1&channel=666&source_id=search_post来源:牛客网本人2020年本硕毕业于广东工业大学:CVTE许乔丹,在2020届秋招共拿到珠海格力,云从科技,CVTE,小米,美的,华为的嵌入式offer,签约CVTE嵌入式岗位,整理牛客上大量大厂嵌入式面经,并逐一查阅文转载 2020-08-18 21:14:34 · 1118 阅读 · 0 评论 -
linux的内核是由bootloader装载到内存中的?
linux的内核的确是由bootloader装载bai到内du存中的。linux的bootloader有2个部分zhi组成:bootstrap和uboot。所以更准确点的说法是dao:linux的内核是由uboot装载到内存中的。内核文件本身是存放在硬盘的文件系统中,这句话就是错的。内核和文件系统是分开存储的。uboot读取kernel到内存是从kernel开始存储的地址开始读取的,而读取开始位置和读取大小,是由环境变量决定的。所以这个时候不需要文件系统的。给你张图片,便于理解吧...转载 2020-08-18 21:04:17 · 581 阅读 · 0 评论 -
bootloader的两个阶段
bootloader一般都是分为两个阶段的,第一个阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和移植性。 两个阶段如下:一、第一阶段功能(1)硬件设备初始化;(2)为加载bootloader的第二个阶段代码准备RAM空间。(3)复制bootloader的第二个阶段代码到RAM中;(4)设置好栈。(5)跳转到第二阶段代码的C入口点。二、第二个阶段的...转载 2020-08-18 21:02:35 · 1944 阅读 · 1 评论 -
孤儿进程与僵尸进程
僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个 子进程在结束时都要经过的阶段。如果子进程在exit()之后,父进程没有来得及处理,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸转载 2020-08-18 20:56:38 · 91 阅读 · 0 评论 -
内核空间
Linux系统对自身进行了划分,一部分核心软件独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux将此称为内核空间。相对地,应用程序则是在“用户空间”中运行。运行在用户空间的应用程序只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备,以及其他一些具体的使用限制。将用户空间和内核空间置于这种非对称访问机制下有很好的安全性,能有效抵御恶意用户的窥探,也能防止质量低劣的用户程序的侵害,从而使系统运转载 2020-08-18 20:47:52 · 138 阅读 · 0 评论 -
内核空间与用户空间的通信方式
下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。1.使用API:这是最常使用的一种方式了A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_to_user():主要应用于设备驱动读写函数中,通过系统调用触发。2.使用proc文件系统:和sysfs文件系统..转载 2020-08-18 20:45:56 · 1399 阅读 · 0 评论 -
进程间通信和线程间通信
进程间通信 转自 https://www.cnblogs.com/LUO77/p/5816326.html线程间通信 https://www.cnblogs.com/jobs1/p/10784021.html线程间通信进程和线程的区别程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映...转载 2020-08-18 20:26:22 · 4354 阅读 · 0 评论