自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 OpenGL 简介

对于刚接触 `OpenGL` 的初学者,常常会有这样一个疑问: `OpenGL` 的源码在哪里,如何编译?

2023-04-17 20:03:00 4181 1

原创 nginx 交叉编译

aarch64。

2023-02-22 14:25:08 262

原创 GCC 同名符号冲突解决办法

先说明一下背景,在 libstrong_symbolx.so 中的 _symbol 即为同名函数 (与 libweak_symbol.so 中的 _symbol 冲突),strong_symbol 和 weak_symbol 同时都调用了 _symbol 符号,但是它们各自 _symbol 的实现是不同的。return 0;###(2)符号隐藏的两种方式这个选项是传递给编译器的,添加这个选项之后,动态库导出符号的默认行为都为本地符号,即弱符号;在程序中针对需要导出的符号需要显式添加关键字。

2023-02-19 21:30:52 1514 3

原创 Weston 窗口管理(2)

本文为窗口管理(1)的续章,更多站在开发者角度,以weston的代码实现讲解窗口管理(1)中所实现的部分业务场景.实际上本章只是初步讲解了一下有关于窗口管理相关的一些数据结构,并利用这些数据结构描述了一些具体场景;实际上的业务场景还将更加复杂,例如在本章最后一个最小化实现的例子中出现了焦点的概念,以及view还是套娃的结构,具有sub view,同时view还要跟surface扯上关系,各种各样的;如果全部描述清楚工作量是相当大的,并且没有什么太大的价值;本文的职责实际就是一个引子而已,减低入门门槛罢了.

2023-01-06 20:49:33 1819

原创 weston 窗口管理 (1)

在传统嵌入式场景下,通常只会运行一个UI程序,故相当于单窗口程序,无需桌面服务器的介入;在桌面系统下,对于每一个UI程序而言,它们的行为相比于嵌入式场景仍然没有发生改变,其对接的仍然是窗口,只不过在同一个时刻允许多个UI程序同时运行.无论如何对于UI程序,它们需要的仅仅是一个窗口,亦或者说是一块用于渲染的画布;UI程序并不关心渲染的程序最终是否呈现在了屏幕上,对于它们而言,将UI程序正确地渲染到画布上,即完成了它们的使命.

2023-01-06 20:44:35 2604

原创 Weston 纹理倒置(render-gl)

在render-gl接入实现off-screen渲染后,发现得到的渲染图发生了180°的倒置.查阅了有关资料后,在中的原生render-gl依赖于实现on-screen渲染,其的起始坐标为左下角;而使用实现的off-screen渲染其坐标与textureweston原生只支持基于的渲染方式,故其已经做过texture顶点左上角至顶点左下角的适配了;而在引入之后,的顶点坐标变为左上角,而其逻辑却与之前保持一致,结果就是图像发生了180°倒置.

2022-12-27 14:35:30 674

原创 weston input 概述

本文描述了有关于 (基于 协议一种显示服务器的实现) 中有关于输入设备管理的部分;为了聚焦于此,本文不会对 整体或 协议进行过多的阐述.考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群:对于前者,将会站在一个较为抽象的层次,以感性的方式讲述一个通用显示服务器的设计; 对于后者,则更多地会参考 的实现细节,结合一些代码示例,帮助读者更好地理解 , 为将来阅读 源码做好一定的准备.不知道有没有人会与我一样疑惑,为什么 显示服务器 会与 输入设备 扯上关系呢?有关于这点的答案实

2022-12-07 17:21:55 1352

原创 nodejs 拓展 C++ 插件

现代客户端开发模式正处于一个飞速的变革,从一开始纯粹的 C 端, 逐渐演化成的模式,在到当今比较激进的模式.Electron给客户端带来了太多了变革;在Electron的加持下, 客户端的开发模式也逐渐向后台开发靠拢, 即使用Electron内嵌HTML快速完成页面的开发,而将具体的(服务)交给了具体后台语言.目前主流的客户端开发语言仍然是C/C++, 在 Windows 下可能也存在着C#;不过由于nodejs对于前端的友好性,即其语法风格与javascript十分相似, 给予。

2022-11-21 19:26:40 1009 1

原创 wayland 概述

wayland是一种用于用于显示服务器的协议,它规定了客户端如何与服务器进行通信。

2022-11-17 16:26:19 1659

原创 NC3 链表中环的入口结点

NC3 链表中环的入口结点

2022-07-31 21:26:13 139

原创 NC2 重排链表

NC2重排链表。

2022-07-30 22:06:41 153

原创 NC1 大数加法

NC1 大数加法。

2022-07-30 21:08:55 128

原创 yh-app(基于vue和uni-app的前端项目示例)

yh-app 简介yh-app是一个高度模仿手机端樱花动漫的前端项目,旨在提供一个通俗易懂、简洁明了的前端项目示例,帮助开发者熟悉例如vue、css以及uni这类比较常见的技术在实际项目开发中的使用方式,从而巩固所掌握到的前端技巧。yh-app以vue作为开发框架,同时为了满足移动端跨平台的开发需求,使用uni-app作为基础组件;为了写出比较标准的示例,yh-app在项目的规范上实际上参考了uView的实现,yh-app亦可以作为研究uView源码的前菜;为了达到巩固技术的目的,yh-app坚持使用原

2022-05-07 16:53:35 2176

原创 06_frpc启动流程

frpc 启动流程背景Go 语言的几个特性:没有构造函数一个文件就是一个模块每个模块存在一个 func init(),初次调用模块时调用fpr 整个代码的组织是比较清晰的,使用 ls 可以看到这样的目录结构结构其中在这里需要比较注意的两个文件夹分别是:cmd : 存放 frpc 和 frps 程序的源代码pkg : frp 开发的基础组件库可以看到 pkg 下都是一些基础的组件库,跟 frp 项目本身关系不大,是一些基础组件(也就是开发其他项目也可以使用);可以看到像是验证、

2021-11-22 19:08:03 1215 1

原创 05_frp_web调试

frp web 调试背景通过前面几个章节,我们知道 frp 在客户端以及服务器都是有控制台的,如下:服务器:客户端:有 web 代表什么呢,代表后端有接口啊;虽然 fpr 官网里对这里部分只字不提,但是不提不代表我就拿不到。在 github 上可以看到以下界面:可以看到这个 web 使用 vue 写的,之后我还看了一下这个还是用 element 的组件写的。所以呢,这一节的内容就是把 frp 的 web 在自己的电脑上跑起来。web 源码git clone https://gith

2021-11-19 16:30:08 1037

原创 04_frp内网穿透实例

frp 内网穿透实例前置在这之前,你应该在嵌入式设备上和带有公网 IP 的服务器上都已经安装好了 frp ,如果没有的话就翻一下前面几节的内容。今天把 frp 的官方文档阅读完了,发现这个项目是我们国人主导的,还是比较自豪的;文档写的非常详细,我的建议是全部读一遍吧,花不了你多久时间的,因此也不介绍 frp 了,直接给出几个我自己的配置实例就可以了。官方文档 : FRP这里给出的几个配置实例的原因主要是因为我的应用场景比较特殊,是用在 IOT 上,也就是寻找一种有效的方式访问到内网里的嵌入式设备,

2021-11-19 11:40:21 3242 2

转载 P2P 中的 NAT 穿越(打洞)方案详解

P2P 中的 NAT 穿越(打洞)方案详解转载自 : P2P 中的 NAT 穿越(打洞)方案详解内容概述P2P 即点对点通信,或称为对等联网,与传统的服务器客户端模式(如下图“P2P 结构模型”所示)有着明显的区别,在即时通讯方案中应用广泛(比如 IM 应用中的实时音视频通信、实时文件传输甚至文字聊天等)。P2P 可以是一种通信模式、一种逻辑网络模型、一种技术、甚至一种理念。在 P2P 网络中(如右图所示),所有通信节点的地位都是对等的,每个节点都扮演着客户机和服务器双重角色,节点之间通过直接通

2021-11-18 10:34:53 1805

转载 01_NAT详解——详细原理、P2P简介

NAT 详解——详细原理、P2P 简介转载自 : NAT 详解——详细原理、P2P 简介IPv4 协议和 NAT 的由来今天,无数快乐的互联网用户在尽情享受 Internet 带来的乐趣。他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需。企业利用互联网发布信息,传递资料和订单,提供技术支持,完成日常办公。然而,Internet 在给亿万用户带来便利的同时,自身却面临一个致命的问题:构建这个无所不能的 Internet 的基础 IPv4 协议已经不能再提供新的网络

2021-11-18 09:55:04 298

翻译 如何运行自己的 ngrokd 服务器

如何运行自己的 ngrokd 服务器运行自己的 ngrok 服务器非常简单!下面的说明将引导您前进!1. 获取 SSL 证书ngrok 通过 TLS 提供安全隧道,因此您需要 SSL 证书。假设您想在 .example.com 上创建隧道,请为 .example.com 购买 SSL 证书。请注意,如果不需要运行 https 隧道,则不需要通配符证书。(事实上,您可以在该点上使用自签名证书,请参阅文档后面的部分)。2. 修改您的 DNS您需要使用提供商提供的 DNS 管理工具来创建一个记录,该记

2021-11-18 08:51:14 456

翻译 ngrok 开发者指南

ngrok 开发者指南组件ngrok 项目由两个组件组成,ngrok 客户端(ngrok)和 ngrok 服务器(ngrokd)。ngrok 客户端是更复杂的部分,因为它有用于显示保存的请求和响应的 UI。编译git clone [email protected]:inconshreveable/ngrok.gitcd ngrok && makebin/ngrok [LOCAL PORT]有一些 Makefile 目标仅用于编译客户端或服务器。make clientmake

2021-11-18 08:50:36 169

翻译 ngrok简介

ngrok - Introspected tunnels to localhost (homepage)”我想在 internet 暴露一个在 NAT 或 防火墙 后面的本地服务器。”什么是 ngrok?ngrok 是一个反向代理,它创建从公共端点到本地运行的 web 服务的安全隧道。ngrok 捕获并分析隧道内的所有流量,以备日后检查和回放。ngrok 2.xNgrok2.x 是 1.x 的继承者,也是当前所有开发工作的重点。其源代码不开源。NOTE 此仓库包含 ngrok 1.x 的代码

2021-11-18 08:46:46 596

原创 03_frp云服务器安装

frp 云服务器安装背景内网穿透本质上的一个前提就是你得有一个公网 IP,而公网 IP 的获取方式有很多种。这里直接买了一年阿里云的轻量级云服务器,然后也因此获得了一个公网 IP。云服务器配置发行版本 : ubuntu内核版本 : 5.4.0-47-genericubuntu 版本 : Ubuntu 20.04.1 LTS体系架构 : x86_64可以看到这个配置是跟我宿主机的环境是一样的,所以也不用考虑自己安装了,直接把宿主机上编译好的 frp 拷贝过去就可以。云服务器开启

2021-11-17 20:24:17 552

原创 02_frp目标机安装

frp 目标机安装下载 frp 源码git clone https://github.com/fatedier/frp.git切换版本cd frpgit checkout v0.38.0其实看到这个版本号我是有点心虚的,这还没有主版本号呢,但是看了下它的 star 数,应该是不会出问题的。交叉编译这个需要之前就有准备好一个带有交叉编译环境的 go。export GOOS=linuxexport GOARCH=armexport GOARM=7make -f Makefil

2021-11-17 16:52:47 186

原创 01_GO交叉编译环境配置

GO 交叉编译环境配置背景大多数嵌入式设备都是没有自己的工具链的,基本上都是通过交叉编译以及远程调试的方案进行开发;目标机上连 C/C++ 的开发环境都没有,自然就不用提及 GO 了。为了在嵌入式设备上运行 GO 编写的程序,需要交叉编译 GO 。而 GO 又是一门比较离谱的语言,其一开始编译环境与 python 一致,使用 gcc 进行编译,但是后来在 1.4 版本之后,之后 GO 的编译采取的方式都是使用旧的 GO 编译新的 GO ,用人话来说就是自己编译自己;所以要配置 GO 的交叉编译环境,

2021-11-17 16:09:17 542

原创 web 小工具开发

web 小工具开发本文只是给出一种解决方案,初心是为了探究高效可视化小工具开发,或者我愿称之为带界面的脚本;目标的人群是像C/C++ 这样的后端人群,因为在 C/C++ 里面,干点什么都很费劲,一个可视化小工具的开发量都不是很小。背景最近有一个小的需求,要为一些设备的升级包生成一个配置文件,同时并将生成的配置文件与升级包一起打包成一个.zip 文件,我们称这个过程为 “打包”。打包的效果如下:其中 *.bin 文件就是我们的升级包,而 *.ini 文件是构建出来的,而 *.zip 则是压

2021-11-15 17:05:03 4670 3

原创 09 ifb简介

IFB简介背景通过前面几章的介绍,你会发现我们能对上行做到较好的控制,而对下行却基本做不了什么复杂的操作。这是 tc 所局限的,因为 tc 的初衷就是为了控制本机往外发送的数据,而外部向本机发送的数据 tc 则不是那么关心。正如之前所列出的 tc 原理图一样,你可以很清楚地看到,tc管的是上行: Userspace programs ^ | +---------------+-

2021-11-02 10:09:53 1508

原创 08 不经常使用的高级队列规定

不经常使用的高级队列规定你应该发现有时候前面提到的那些队列不能满足你的需要, 这里列出了一些内核包含的其它更多类型的队列。bfifo/pfifo这些无类的队列因为没有内部频道而显得比 pfifo_fast 还要简单,所有的流量都均等处理。 但是它们还是有一个好处: 他们可以做统计。 所以即使你不想整形或排序,你也可是使用这个队列规定来检查网卡的后台日志。pfifo 的长度单位以包的个数计,而 bfifo 以字节计。bfifo/pfifo 参数与使用limit : 规定了队列的长度。 对于

2021-11-02 10:08:15 85

原创 07 方便菜谱

方便菜谱本章收录了一些“方便菜谱”,希望能够帮你解决实际问题。方便菜谱不能代替理解原理,所以你还是应该着重领会其内在道理。而且真的不建议你照抄,想一想这是20年前(2021)写下的东西,当初作者又是借鉴其他的案例。用不同的 SLA 运行多个网站你有很多种方法实现这个。 Apache 的有些模块可以支持这个功能,但是我们会让你看看 Linux 如何处理这个问题, 并能够提供其它多种服务的。 这些命令都是从 Jamal Hadi 的演示中偷学来的。比如说我们有两个顾客,需要 http、 ftp 和

2021-11-02 09:57:34 97

原创 06 对包进行分类的高级过滤器

对包进行分类的高级过滤器你能够了解到什么在 04 带宽管理的队列规定 中,我们已经详细地讲述了 qdisc 以及 calss, filter 我们在使用,但是并没有详细地讲述其使用。还记得 04 带宽管理的队列规定.md 告诫你不要尝试的案例吗,如果你想解决这个尴尬的问题,这章会给出你解决的方案。阅读本章,请保证 04 带宽管理的队列规定 相关的知识你已经掌握。简介就像在分类的队列规定一段中解释的,过滤器用于把数据包分类并分入对应的子队列中。这些过滤器在分类的队列规定的内部被调用。下面就是我们可

2021-11-01 16:28:08 251

原创 05 netem 队列

NetemNetem 通过模拟广域网的特性,位测试协议提供了网络仿真功能。当前版本模拟传输延迟、丢包、重复包和包乱序。netem 内核组件在以下情况下启用: Networking --> Networking Options --> QoS and/or fair queuing --> Network emulatorNetem 由命令行工具 “tc” 控制,它是 iproute2 工具包的一部分。tc命令使用/usr/lib/tc目录中的共享

2021-11-01 16:25:56 262

原创 04 带宽管理的队列规定

带宽管理的队列规定你能够了解到什么在这里你将了解到 tc 核心三组件中最核心的部分(qdisc),其余两个分别是 filter 以及 class,由于连贯性的问题,class也会放在这里说明。了解完本章,你将从一个应用层的角度了解清楚 tc 的使用,以及它背后映射出来的一些原理。如果你想对tc进行灵活地应用,强烈建议你读完本章所有内容,它是值得的。约定为避免概念混乱, tc 采用如下规定来描述带宽:bit or a bare number Bits per secondkbit

2021-11-01 16:22:59 796

原创 03 iproute2简介

iproute2简介这章本质上没有太大的意义,它与 tc 基本上毫无关系,如果你只关心 tc 的话,请跳过此章节,此章节出现东西在以后的章节也并不会出现。此章的意义是在于让你了解一下 iproute2 以及它的工具,为未来提供基础,因为安装的时候我们可不止安装了tc,其他工具是否对你有用,这里不得而知,所以特地写了一章,让你知道一下 iproute2 的其他功能。其实也就是 ip 指令了。为什么使用 iproute2?现在,绝大多数 Linux 发行版和绝大多数 UNIX 都使用古老的 arp,

2021-11-01 16:08:59 465

原创 02 内核支持

内核支持此章会将很多废话,如果想直接了解 tc 需要哪些模块,则请跳转到最后,此章在讲解 内核支持 时也会贯穿一些基本理论知识,在 00 tc 简介.md 曾经说过,tc 是一个比较复杂的"gui"。在此章会将清楚其中的缘由。设置工作空间# WORKSPACE就是当前目录(docs)的上一级目录export WORKSPACE=$(pwd)tc 测试宿主机上测试不必纠结于指令的具体应用,这些在后面会解释清楚,这里观察清楚现象即可宿主机测试 tbf 模块宿主机测试 sqf 模块

2021-11-01 16:06:33 268

原创 01 tc安装

TC 安装此安装针对于嵌入式设备,即交叉编译。由于 tc 属于 iproute2, 所以安装 tc 就是在安装 iproute2。设置工作空间# WORKSPACE就是当前目录(docs)的上一级目录export WORKSPACE=$(pwd)源码下载# 为当前最新的版本(2021.8.26)wget https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/iproute2-5.9.0.tar.gztar zxvf

2021-11-01 15:44:46 1948 1

原创 00 tc简介

tc 简介tc 并不是一个单独的指令,它是隶属于一个家族,iproute2 中的一个成员,与 tc 同属于同一个家族的程序还有大名鼎鼎的 ip 指令。Linux 内核将 iproute2 称做是 Traffic Control 体系,事实上 iproute2 中的主要两个指令 ip 以及 tc 是相互协调工作的。iproute2实际上主要的应用对象是路由器以及交换机,在今天许多路由器以及交换机或多或少都借鉴了 iproute2 的实现。tc 则是属于 iproute2 中的 流量控制 部分,正如 tc

2021-11-01 15:35:59 227

原创 离谱的交叉编译 Judy

离谱的交叉编译 Judy背景在交叉编译 netdata 的过程中,我需要编译 netdata 所依赖 Judy ,但是它的安装方式实在是有点迷。Judy 安装包获取地址:https://nchc.dl.sourceforge.net/project/judy/judy/Judy-1.0.5/Judy-1.0.5.tar.gz复现进去直接交叉编译,如下:cd cd judy-1.0.5/./configure --host=arm-hisiv600-linuxmake然后出现以下的报错:

2021-10-27 17:43:15 141

原创 离谱的交叉编译 - 前言

前言第一次接触到交叉编译已经是两年前的事情了,然而最近又接触到了交叉编译;在短短几个月的时间里,算一算可能我已经交叉编译了有接近 50 个库或者工具了,所以自认为对交叉编译可能会出现的种种问题还是比较清楚的。写这个专栏的一个初心是在不断地交叉编译过程中,慢慢 get 到了交叉编译中的一些点,希望能够节约大家在交叉编译上所花费的时间,毕竟难顶的时候可能一两天连一个库都编译不起来,就别提开展工作了,实在是让人十分恼火。此外在交叉编译之路的过程中,往往会有许多的帖子描述如何交叉编译某一个库或者工具,但是说实

2021-10-27 17:21:54 74

原创 08_VScode远程调试(进阶)

VScode 远程调试进阶背景这里是 VScode 远程调试的进阶用法,或者说是 gdb 的进阶用法,因为这其实跟 VScode 的关系不大,虽然修改的 launch.json 即 VScode 的调试配置文件,但是其实本质上是调用 gdb 的命令行而已。原始配置这里给出没有做出以下改进前 launch.json 的配置:{ "version": "0.2.0", "configurations": [ { "name": "web_tc(l

2021-10-25 16:05:27 2148

原创 07_VScode远程调试(基础)

VScode 远程调试前言VScode 只是一个很简单的文本编辑器,如果你在使用 VScode 进行远程调试时,发现不能查看 STL 容器的值,请参见 GDB容器可视化, 这个问题将在这里被解决。此外,这是只是提供一种解决方案而已,而非完美的解决方案,例如在 VScode 使用 Remote - SSH 或者说是 远程资源管理器 来辅助远程调试,无疑是一种更加有效便捷的方式;但是在我的目标机上,由于大部分的文件目录是只读的,加上目标机上的脚本只有 sh 而无 bash,所以 远程资源管理器 对我来说这

2021-10-25 16:03:37 1137

原创 06_交叉编译准备

交叉编译准备背景在嵌入式 Linux 开发中,往往会出现两个名词,宿主机以及目标机;而实际上我们程序运行的地方是目标机,但是编译出程序的地方却不是目标机而是宿主机,这里有很多中原因了;大致上分为三种:第一种是目标机高度裁剪,连 gcc 都没有,也就没有能力编译;第二种而是目标机性能比较低,编译所耗费的时间比较多;第三种则是目标机虽然能力很强,比如服务器。但是耐不住没有图形化,所以还是交叉编译。总而言之,就是不方便,所以才有宿主机帮忙编译;所以反过来说宿主机一定是好用的,也就是为什么宿主机铺天盖地就是一

2021-10-22 20:19:30 363

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除