0%

What does SDK mean in current context?

很多时候,我们需要闭源一部分源码, 然后再把整个源码仓库共享给指定人员。这个源码仓库就称之为 SDK。

How to make SDK based on Yocto build system

根据目前的调查结论,基于 Yocto 编译系统做 SDK 主要有如下三种方式,本文主要介绍第一种方式,也会稍微介绍下第二、三种方式。

  • 将闭源部分源码做成 prebuilt 包;
  • 重写 do_install 任务直接安装闭源部分源码生成的 deb 包;
  • 将源码编译成二进制并替换,修改 Makefile 文件。

最开始倾向于以 2、3 的方式来做 SDK, 深入调查后发现 1 才是最合适的方式,原因有三:

  • 高通有开发一个基于 qprebuilt.bbclass 类来实现的半成品 prebuilt 功能, 而且高通的闭源源码也是按照这种方式处理的。
  • 直接安装预编译的 deb 包是一个糟糕的决定,会给以后带来很多不确定性和不可追溯性。
  • 编译二进制并替换的方式在 Yocto 中逻辑更为复杂,且不符合官方推荐的标准做法。

Create Prebuilt tarball

制作预编译包是官方比较推荐的一种方式,详细过程请查看 “Lessons and Gains of making prebuilt sdk” 部分。现以 RB5 LU 为例将准备步骤简单总结如下,其分为两种情况:

  • 可以生成中间产物,用中间产物创建;
  • 不能生成中间产物,直接取最终产物创建。

我们也可以跳过第一种情况,直接按照第二种方式准备所有模块的预编译包,可以直接跳过如下第 2 步。

  1. 找到并修改闭源代码对应的 bb 文件, 添加如下两行代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# RB5 LU 需要修改如下文件:
# poky/meta-qti-bsp-prop/classes/qprebuilt.bbclass
# poky/meta-qti-bsp-prop/recipes-bsp/sensors/sensors-see_git.bb
# poky/meta-qti-bt/recipes/bt-app/bt-app_git.bb
# poky/meta-qti-bt/recipes/bt-cert/bt-cert_git.bb
# poky/meta-qti-bt/recipes/bthost-ipc/bthost-ipc_git.bb
# poky/meta-qti-bt/recipes/fluoride/fluoride_git.bb
# poky/meta-qti-bt/recipes/libbt-vendor/libbt-vendor_git.bb
# poky/meta-qti-camera-prop/recipes/camx/camx_0.1.bb
# poky/meta-qti-camera-prop/recipes/camx/camxlib_0.1.bb
# poky/meta-qti-camera-prop/recipes/camx/chicdk_0.1.bb
# poky/meta-qti-gst-prop/recipes/secure-gst/secure-gst.bb
# poky/meta-qti-robotics-prop/recipes/imud/imud.bb
# poky/meta-qti-sensors-prop/recipes/sensors/sensors-see-qti_git.bb

RM_WORK_EXCLUDE += "${PN}" # 也可以添加所有模块到 local.conf, 譬如: RM_WORK_EXCLUDE += "camx chicdk ..."
inherit qprebuilt # 如果 bb 文件已经继承了此类,就不需要增加此行
Read more »

在大数据早已普及的今日,尤其随着 5G 技术和移动设备的逐渐普及,各种有线或无线的传输技术也迎来了迅猛发展,内容日新月异、错综复杂,你又能窥探其中多少呢?本文将简单介绍高速影音传输技术 MIPI, 主要基于 CSI-2 。

MIPI(Mobile Industry Processor Interface, 移动产业处理器接口) Alliance, 即 MIPI 联盟发起并为移动应用处理器制定了开放标准和一种规范。主要是手机内部的接口(摄像头、显示屏接口、射频/基带接口)等标准化,从而减少手机内部接口的复杂程度及增加设计的灵活性。MIPI 联盟下面有不同的工作组,分别定义的一系列接口标准,比如 CSI(Camera Serial Interface, 摄像头串行接口)、DSI(Display Serial Interface,显示串行接口)、DigRF(射频接口)、SLIMBUS(麦克风、喇叭接口)等,其优点是更低功耗,更高数据传输数量和更小的空间。

Definitions and Acronyms

Read more »

What is life?
Life is what happens to us while we are busy making other plans.

时光匆匆,转眼间,回到成都已经三年多了。这三年来鲜少有时间静下心来认真思考反省,有因为小孩出生前的误诊让自己整夜整夜地难过得想哭,有因为家事让自己感觉喘不过气,也有因为工作的事让自己觉得憋屈失去信心,以及因为种种其他难以言说的压力让自己整夜睡不着觉。还好乐观战胜了悲观,事情总体上都走向了好的方面。

最近这几个月,工作不顺心,家里发生了很多事情,有很多事情想做又做不了,似乎自己又进入了一段艰难的时光,借着周末来梳理梳理(吐槽吐槽),反省反省,也想想后面怎么走。

混乱的大脑

因为家庭和早期抑郁的原因,自己毕业好几年后才想明白怎么做一个有用的人,不辜负这一生。醒悟得太晚最大的弊端就是,需要补的功课太多,然后时间根本不够用。有时候也在想:“当 money 够用时,似乎无论怎么努力,资产都难以有质的飞跃了,似乎也难以迈入 A8,A9 … 要不自己也‘躺平’吧!” 还好自己内心深处还有一簇不安分的火苗。

很多时候也会想想生命、死亡等宏观的话题,每当这个时刻,自己内心中都会有一些畏惧,似乎也有一点对生命真谛的感悟,可惜自己还是差些火候,总是会辜负时间。

工作

工作不顺心是现在惶恐不安的主因,有自己的原因,也有很多公司的原因。首要的一个点是最近公司准备搬家,通勤距离一下变为 40 公里,从没试过这么长距离的通勤。

Read more »

此篇文章是基于高通 ODM BSP 开发做的一个简单总结,起初是用来对新人进行培训的。

我觉得学习内核驱动时,最开始只需要 ‘Know what, not know how ’。 不用去探究细节,只需要知道整体的框架,知道有哪些需要我们重视的内容即可。

何为 Linux 内核开发?

首先,初步认识下 Linux kernel

linux_intro

  • Linux 内核的框架如上图。
  • 设备子系统负责和硬件打交道。
  • 大部分工作集中在设备子系统部分。
Read more »

本文的动态图皆来自于莉迪亚·哈莉(Lydia Hallie) 的文章 CS Visualized: Useful Git Commands

VCS 的发展历史

首先,我们来聊聊 VCS, Version Control System, 即版本控制系统的发展历史。

Manual VCS

最初的时候,大家都是通过复制目录来进行版本管理,如下图:

manual vcs

这样做的缺点显而易见:

  • 难以维护
  • 难以回溯
Read more »

What is pstore?

pstore, persistent storage, 是一个存储内核日志或者内核 panic 的文件系统,内核会把相关信息存储在一个不能被其他用户重写的指定 RAM 区域,下一次启动时,这个区域会被挂载到 /pstore,一般在 /sys/fs/pstore, 这样我们就可以访问这些数据了。

pstore 在内核中的开关是 CONFIG_PSTORE,pstore 提供的是一套可扩展的机制,提供如下类型:

  • PSTORE_TYPE_DMESG, 表示内核日志
  • PSTORE_TYPE_MCE, 表示硬件错误
  • PSTORE_TYPE_CONSOLE, 表示控制台输出,所有内核信息。
  • PSTORE_TYPE_FTRACE, 表示函数调用序列, ftrace 信息。

ramoops 指的是采用 ram 保存 oops 信息的一个功能,这个功能从 3.10.40 开始采用 pstore 机制来实现,内核中的开关控制:

  • PSTORE_PMSG,用户空间信息,/dev/pmsg0,pmsg-ramoops-
  • PSTORE_CONSOLE,控制台输出,所有内核信息,console-ramoops-
  • PSTORE_FTRACE,函数调用序列, ftrace 信息。
  • PSTORE_RAM, panic/oops 信息

How to config?

Read more »

Basic

Here is A little basic knowledge of shell.

env

1
2
3
4
5
6
$USER
$UID
$PATH

set | more # check the variables including shell-local variables(including shell functions)
env | less # check the variables except shell-local variables(including shell functions)

Parameters

Here is a cheetsheet about parameters of shell.

Parameters Comments
$0 script name
$<n> the <n>th parameter
$# nums of parameters
$@ All parameters, could be a list
$* All parameters, but behave as a whole
$$ PID of the current progress
$? return of last cmd
$! PID of the last background cmd
Read more »

之前为了让终端炫酷好用,配置了 Terminator + Oh My ZSH + autosuggestions + highlighting + Agnoster theme + powerline fonts + solarized colors,可是终端的反应速度受到了影响,移植性也不高,最主要的是对于我来说,Terminator 不够 Terminal + Tmux 酷,所以最近决定切回 Terminal + Tmux

TerminalUbuntu 自带的终端,就不做介绍了。今天主要聊聊Tmux 的基本用法,做一个备忘录。 Tmux 除了分屏功能外,还有一个功能我很喜欢,即 persistent,也就是运行在 Tmux 中的程序在其断开前会一直保持运行状态。譬如:远程登录服务器,通过 Tmux 运行程序,即使本地登录客户端断开,程序也会保持运行,除非我们在服务器端退出 Tmux 或者重启服务器。

Read more »