将文本类型的Hex数据,转为内存中的binary数据。
需要从文本读入一组二进制数据。希望尽可能多的兼容各种文本形式。比如0x1234567890abcdef或1234567890abcdef或12 34 45 78 90 ab cd ef或12,34,56,78,90,ab,cd,ef或者0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef这样的文本都可以正确的解析成二进制数据,还要需要有无效格式的判断。
以下是C++实现:
需要从文本读入一组二进制数据。希望尽可能多的兼容各种文本形式。比如0x1234567890abcdef或1234567890abcdef或12 34 45 78 90 ab cd ef或12,34,56,78,90,ab,cd,ef或者0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef这样的文本都可以正确的解析成二进制数据,还要需要有无效格式的判断。
以下是C++实现:
之前整理过一篇《直接检出chromium某tag的完整可构建源码。》的文章。
这个方法中,在git fetch
这个步骤需要花费大量的时间。
经过对git
命令的研究之后,终于再总结出一个最快速的从零开始,直接check出指定的tag代码的方法。旧的方法完全可以淘汰了。
首先,还是先创建代码存放目前。不同的是,这里不需要创建src
目录。
然后还是创建.gclient
文件:
如果是要构建android
平台的浏览器,就在这个文件最后添加一行内容:
到这里,还跟之前的方法相差不多。但是接下来就不一样了。以当前最新的官方正式版本112.0.5615.50
为例。
直接克隆这个tag的代码:
这里要注意,其中--depth
必须为2,原因后面会说到。
这个步骤,代替了原来的git fetch
。并且深度只有2,所以原本需要同步的30+G的数据,变成只有区区1+G。这样就节省下了大量的时间和流量。
接下来,还是同步第三方工程和工具链。
这里就要提一下为什么上面--depth
必须为2。因为gclient在runhook
的时候,是会根据git的提交日志来创建当前的版本信息。而深度为1的时候,就失去了需要的日志内容。会导致下面两个文件内的信息为空。当然,这样也会不导致编译失败,但是在浏览器内就无法看到构建的版本信息了。
src/build/util/LASTCHANGE
src/gpu/config/gpu_lists_version.h
这时,这份源码就已经可以编译出一份完整的chromium浏览器了。
同时,在这份源码的基础上,同样可以继续更新后续的代码。比如需要更新到112.0.5615.67
这个tag。
而这个更新过程,同步的数据也非常小,非常快捷。因此这个方法应该是最终的chromium代码同步方法了。
ubuntu在内核的更新上,还是非常勤快的。如果每个更新都即时跟进的话,很快就是积累下很多旧内核。
旧内核不仅占用空间,而且看着难受……
使用sudo apt autoremove
可以移除旧内核文件,但是在dpkg --get-selections
中还会出现,并被标记为deinstall
状态。同样看着难受……
并且如果是系统大版本更新,那旧内核也不能通过上面那个命令来移除。这时候就需要用别的方法来干净的删除内核。
首先列出已安装的内核包:
通过sudo apt-get purge
来指定要删除的内核包。比如我要删除5.13
的所有内核包:
如果已经通过sudo apt autoremove
移除,并留下deinstall
状态的内核。那可以用下面的命令删除所有deinstall
状态的包。
如果按前面文章中描述的openwrt编译中,加添的feed源:
那么默认集成的是普通的geodata文件。
而事实上有一份科学爱好者制作的加强版文件,可以更方便的制定各种策略。
我们可以通过修改Makefile
来让编译出来的固件直接集成加强版文件。
对应的Makefile
的路径为:
编辑这个文件,找到Download/geoip
与Download/geosite
两个节点分别替换为以下内容:
geoip
geosite
然后开始正常编译就可以直接集成加强版的文件了。
因为加强版文件更新非常活跃,基本上每日更新。所以想自己集成最新的文件,只需要修改VER
对应的版本号,和文件HASH
的哈希值。至于哈希值从哪里来?那就要到他的发布页上去查看了。
一般情况下,直接在git个新建一个分支,那新分支会继承之前分支的所有历史节点。
但是,有时候需要创建一个干净的分支。比如当前项目要开始一个全新的大版本。
这时候在创建分支的时候,就可以加上--orphan
参数,这将创建一个干净的,没有历史节点的分支。
比如:
这个时候,之前分支下的文件都会被标记为删除。添加需要保留的文件,提交后就可以把这个新分支推送到服务端。