xftp 找不到匹配的host key 算法
在 /etc/ssh/sshd_config 尾部添加:
HostKeyAlgorithms +ssh-rsa
PubKeyAcceptedKeyTypes +ssh-rsa
systemctl restart sshd
注意是sshd_config ,不是ssh_config
在 /etc/ssh/sshd_config 尾部添加:
HostKeyAlgorithms +ssh-rsa
PubKeyAcceptedKeyTypes +ssh-rsa
systemctl restart sshd
注意是sshd_config ,不是ssh_config
https://github.com/linux-sunxi/sunxi-tools/tree/windows#using-sunxi-tools-under-windows
$ ./sunxi-fel sid
12c00002:24104620:78a24604:600b0dd0
$ ./sunxi-fel ver
AWUSBFEX soc=00001681(V3s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
sunxi-fel -p spiflash-read 0 0x100 test.bin
sunxi-fel.exe -p spiflash-write 0 test.bin
docker run -tid --name baota -p 50080:80 -p 58888:8888 -p 50888:888 --restart always -v /mnt/user/appdata/baota/wwwroot:/www/wwwroot -v /mnt/user/appdata/baota/server/data:/www/server/data -v /mnt/user/appdata/baota/backup:/www/backup -v /mnt/user/appdata/baota/server/panel/vhost:/www/server/panel/vhost btpanel/baota:lnmp
如何查看默认安装的初始地址和账号:
/etc/init.d/bt default
如何调出bt修改菜单
bt
如果其他docker有通过自定义网络访问baota,那么记得重装baota后,加入自定义网络:
docker network connect --ip 172.18.0.200 myNetwork baota
Airport Express 二代型号1396: 通过有线接音箱,把普通音箱变成 支持airplay的音箱
抛开路由功能不谈,Airport Express+音箱=homepod
比较常用的工具就是qemu-img
将qcow2转换为vmdk:
qemu-img convert -p -f qcow2 -O vmdk disk1.qcow2 disk1.vmdk
上述命令中各参数对应的说明如下:
-p:表示镜像转换的进度。
-f后面为源镜像格式。
-O(必须是大写)后面的参数由如下3个部分组成:转换出来的镜像格式 + 源镜像文件名称 + 目标文件名称。
转换完成后,目标文件会出现在源镜像文件所在的目录下。
·## 准备工作
sudo apt-get install gcc-arm-linux-gnueabihf
sudo apt-get install git
sudo apt-get install Python2
git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current
修改u-boot/include/configs/sun8i.h文件 加入:
#define CONFIG_BOOTCOMMAND "setenv bootm_boot_mode sec; " \
"load mmc 0:1 0x41000000 zImage; " \
"load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero.dtb; " \
"bootz 0x41000000 - 0x41800000;"
#define CONFIG_BOOTARGS "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0"
git clone -b v3s-spi-experimental https://github.com/Lichee-Pi/u-boot.git
执行 make ARCH=arm menuconfig 打开uboot菜单配置,进入到 Device Drivers ‣ SPI Flash Support
注意看一下自己flash的厂家名称,例如选上Macronix SPI flash support用来支持测试用的flash:MX25L25645G。
如果使用的是16MB以上的flash,需要勾选flash bank支持选项,否则最多只能读到16MB: CONFIG_SPI_FLASH_BAR
这里 使用 MX25L25645G, 32M SPI flash 作为启动介质,规划分区如下:
分区序号 | 分区大小 | 分区作用 | 地址空间及分区名 |
---|---|---|---|
mtd0 | 1MB | spl+uboot | 0x0000000-0x0100000 : "uboot" |
mtd1 | 64KB | dtb文件 | 0x0100000-0x0110000: "dtb" |
mtd2 | 4MB | linux内核 | 0x0110000-0x0510000 : "kernel" |
mtd3 | 剩余 | 根文件系统 | 0x0510000-0x2000000 : "rootfs" |
#define CONFIG_BOOTCOMMAND "sf probe 0; " \
"sf read 0x41800000 0x100000 0x10000; " \
"sf read 0x41000000 0x110000 0x400000; " \
"bootz 0x41000000 - 0x41800000"
#define CONFIG_BOOTARGS "console=ttyS0,115200 earlyprintk panic=5 rootwait " \
"mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) root=31:03 rw rootfstype=jffs2"
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make LicheePi_Zero_defconfig
ARCH=arm make menuconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make
编译完成后,在当前目录下生成了u-boot-sunxi-with-spl.bin,可以烧录到TF卡8K偏移处启动
注意:对于大于16M的flash,需要在menuconfig中开 CONFIG_SPI_FLASH_BAR
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
<command-line>: fatal error: curses.h: No such file or directory
解决:sudo apt-get install libncurses5-dev libncursesw5-dev
Your dtc is too old, please upgrade to dtc 1.4 or newer
解决:apt-get install device-tree-compiler
https://licheezero.readthedocs.io/
https://wiki.sipeed.com/soft/Lichee/zh/Zero-Doc/
因为购买时sd和板子是分开购买的,不像其他的开发板,到手就用,这个要自己烧录才能体验到板子的基本功能。 ### 固件下载 可以参考上面的这个https://wiki.sipeed.com/soft/Lichee/zh/Zero-Doc/System_Development/download_onekey.html
可能采坑的地方是对于新手,这个文档没有说清楚,下载的细节。需要解压后下载dd文件,如果你是直接下载,就会发现板子没有反应,不知所措。
这里我自己使用的是:lichee_zero-mindb_alpha.dd:
按照官方指导,连接uart0,就能看到系统的开机日志:
网上文档说的是root licheepi,实际验证不对。
经多方验证,有以下几种密码组合:
把笔记本升级了wifi6的 ax3000h模组,发现系统状态显示wifi信号非常弱。
调整了天线后无效果。
于是想升级下驱动试试,在官网找到驱动:
https://cdn.itranscloud.com/drivers/WiFi-22.200.0-Driver64-Win10-Win11.exe
升级完一下变满格了:
python 多版本管理有pyenv,node也有类似的工具nvm
windows:https://github.com/coreybutler/nvm-windows
other:https://github.com/nvm-sh/nvm
nvm install x.x.x
这里x.x.x就是你想安装的node的版本
nvm list
nvm use x.x.x
测试机型:XR
现象:无法卡机,插充电有提示音, 多次按电源键有反馈,但是就是无法开机
参考官方的方案:
1、拔掉电源线,等待10 秒后再插回去
2、等候5 秒后按压HomePod mini 顶部
3、此时顶部的光会由白色转回红色
4、当你听到三次哔声后,即表示重置完成。
注意:如果你使用的是带HDMI的桌面版,一定要选择一个电流足够的适配器,否则会导致异常重启。
sudo passwd root
sudo nano /boot/config.txt
display_hdmi_rotate=2
sudo systemctl enable ssh
sudo systemctl start ssh
系统默认python3,有时候你需要运行的项目是python2的,我们需要pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/libexec:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l
On the other hand, the BCM2835 uses a single core and thread 32-bit microprocessor. Once again, it features a clock speed of 700 Mhz. However, it has a turbo capability to boost clock frequencies up to 1 GHz. Unfortunately, this feature is absent from the BCM2711.
The BCM2835 is an SoC that Broadcom Semiconductors developed. As we have briefly mentioned in the introduction, SoC packages such as the BCM2835 make devices such as the Raspberry Pi Zero possible. Additionally, The Raspberry Pi Foundation features the BCM2835 in the Raspberry Pi A, A+, B, B+, and the Raspberry Pi Zero W. Moreover, you can find it in rare models such as the Raspberry Pi Compute Module 1.
Since it’s an older chip package, you’re unlikely to find it in newer microcontrollers or single-board computers. However, its capabilities and peripherals are still worth exploring.
准备大于8G的SD
根据前面的介绍,我们知道我们的板子是32架构,所以我们要选择32bit的系统:
说明:
经过耐心的等待,就会提示校验成功,可以拿下sd插入设备了。
关于镜像存储功能简单总结:自动回源,切换无拷贝工作量,且只回源一次,在某些源不稳定的架构中,非常有用。
主要做以下几步:
在对象存储-》空间管理里面,创建一个空间。
加速域名其实就是你想镜像的内容入口。
这里主要就是回源地址,这里非常有用的是支持端口,你懂的,内网资源呵呵呵。
做好以上设置,功能就基本可用了,至于其他高级数据,再按需开启。
最后需要说明的是,镜像服务是一种cdn服务,是收流量费的,在方便和钱之前,还是要实际斟酌调试的。
ldd a.so
可以检查a的依赖,但是因为ldd要链接a.so,所以在本机环境正常,但是当是交叉编译的目标时,就不行了。
这时候可以用objdump来检查了:
objdump -x a.so |grep NEEDED
我们知道在ffmpeg已经有了很多lib,比如avcode avdevice avutil等。
如果我们要现有的makefile框架中新增加一个lib叫做a.so,该如何修改?
本文基于ffmpeg4.3.4,如果验证版本有变,请自行调整。
NAME = a
DESC = FFmpeg new demo library
HEADERS = a.h version.h
OBJS = a.o
FFLIBS := avutil a
# this list should be kept in linking order
LIBRARY_LIST="
avdevice
avfilter
swscale
postproc
avformat
avcodec
swresample
avresample
avutil
a
"
ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample a
至此,只要a配置正确的makefile就应该能正确编译了。
上面介绍了如何扩展lib,假如ffmpeg原有的lib 叫 x.so, 我们二次开发了一个基于x.so的 a.so, 那么如何让a.so能正确调用到x.so?
configure:
# libraries, in any order
avenc_deps="ava"
说明上面的av是沿用ffmpeg默认命令习惯
TOOLS_DIR=toolchain/bin
./configure --enable-shared \
--disable-static \
--disable-x86asm \
--enable-cross-compile \
--strip=$TOOLS_DIR/llvm-strip \
--extra-cflags="-I$(pwd)/install/include" \
--extra-ldflags="-L$(pwd)/install/libs" \
--prefix=$(pwd)/install \
--target-os=linux \
TOOLS_DIR=ndk-toolchain/bin
./configure --enable-shared \
--disable-static \
--disable-x86asm \
--enable-cross-compile \
--cc=$TOOLS_DIR/armv7a-linux-androideabi26-clang \
--cxx=$TOOLS_DIR/armv7a-linux-androideabi26-clang++ \
--strip=$TOOLS_DIR/llvm-strip \
--extra-cflags="-I$(pwd)/install/include" \
--extra-ldflags="-L$(pwd)/install/libs" \
--arch=arm \
--prefix=$(pwd)/install \
--target-os=android \
当我们想定制入网优先级,或者在多漫游网络中想选择较为理想信号强度的时候,就可能用到xPLMNs。
需要说明的是,部分plmn是在sim中的,能不能定制修改,跟开卡的套餐和运营商发卡的限制有关,需要实际测试。
所有的细节都在3GPP的标准中有详细说明,可以自行查阅。
我们经常看到uplmn用户自定义plmn,优先级高于oplmn,参考概述图,我们并没有看到uplmn的说明。
参考以下的内容:
The OPLMN is formally known as the ‘OPLMNwAcT’, and the UPLMN as the ‘PLMNwAcT’. The ‘wAcT’ in each case is short for ‘with Access Technology’
所以,uplmn 实际就是 PLMNwAcT=0x6F60=28512
参考ref:
刚开始只想更换电池,因为电池掉到80%以下了,基本一天两三充。但是拆机过程中把屏幕不小心搞废了,正好以前手机也摔过,屏幕有印痕黑块,所以很痛快就想一起换了。
这个是整个更换中最难的部分,估计也是很多人容易搞砸的地方。
刚开始没搞明白拆屏幕的细节,也没有网上的抬屏工具,基本是凭经验用风枪和刀片弄的,结果硬生生把屏幕从中间拆开了(有点虎):
移除以上部位的固定螺丝后,就可以把屏幕和电池拆卸下来了。
需要注意的是拆卸电池要小心,不要用金属戳,避免电池短路自燃
新买的屏幕总成是没有喇叭部分的,需要移植旧屏幕上的部分,注意的是记得要把胶托移过来,这样支撑和音腔效果才能好:
拆除成功后,先装屏幕,然后再装电池,测试系统开机正常。如果不能开机或者功能不正常,逐个检查fpc座子。
测试通过后,开始加装盖板和螺丝。
最后一步就是贴胶膜,主要是防水:
红色的一圈就是胶膜,贴好后,撕掉塑料,然后把屏幕装进去,轻轻的一圈压好,再锁底部的两个螺丝。
电池和屏幕都正常。
GPon是之际可以ppoe拨号的,为了使用自己路由器的一些功能,所以想用自己的拨号,实质上也是有差异的比如NAT的支持效果等。
很早就改成自己路由器了,最近因为想改家庭网络配置又改成gpon了,然后发现效果不好又想改回去,就死活也配置不成功了,浪费了一上午,所以记录下,避免下次再吃瘪。
这里重要的几个点:
需要说明的是,配置好了后,经过验证是不需要vlan绑定的。
git log
git stash #保留现场
git reset --hard commitId
git push origin HEAD --force
git stash pop #恢复现场
xxxxx Read-only file system
原因:这是个小概率的官方已知问题,发生在clone的第一次运行中。
解决:reboot
Facility | Hostname | Test Download |
---|---|---|
US East(美国东部,纽瓦克) | speedtest.newark.linode.com | 100MB-newark.bin |
US Southeast(美国东南,亚特兰大) | speedtest.atlanta.linode.com | 100MB-atlanta.bin |
US Central(美国中部,达拉斯) | speedtest.dallas.linode.com | 100MB-dallas.bin |
US West(美国西部,费利蒙) | speedtest.fremont.linode.com | 100MB-fremont.bin |
EU Central(欧洲中部,法兰克福) | speedtest.frankfurt.linode.com | 100MB-frankfurt.bin |
EU West(欧洲西部,伦敦) | speedtest.london.linode.com | 100MB-london.bin |
AP South(亚太南部,新加坡) | speedtest.singapore.linode.com | 100MB-singapore.bin |
AP Northeast(亚太东北,东京) | speedtest.tokyo2.linode.com | 100MB-tokyo2.bin |
方案思路: 对关键数据和mdata数据做加密,阻止播放器正确解析
实现细节:
以下的内容其实也适用于在安卓下编译其他工具。
ffmpeg下载:https://github.com/FFFmpeg/FFFmpeg
编写配置脚本:
TOOLS_DIR=ndk路径/toolchains/llvm/prebuilt/linux-x86_64/bin
./configure --enable-shared \
--disable-static \
--disable-x86asm \
--enable-cross-compile \
--cc=$TOOLS_DIR/aarch64-linux-android30-clang \
--cxx=$TOOLS_DIR/aarch64-linux-android30-clang++ \
--strip=$TOOLS_DIR/llvm-strip \
--extra-cflags="-I$(pwd)/include" \
--extra-ldflags="-L$(pwd)/libs" \
--arch=arm64 \
--prefix=$(pwd)/install/aarch64 \
--target-os=android
请注意arch要更新成实际的:arch=arm64 or arch=arm
如果想让程序在当前目录寻找依赖的.so文件(LDFLAGS = -Wl,--hash-style=sysv,-Bsymbolic,-rpath=./):
make -j16 -Wl,--hash-style=sysv,-Bsymbolic,-rpath=./
// 注释
func预定义标识符
在
指定的结构体初始值设定项
-空的宏参数
在
灵活的数组成员 (zero size arrays)
内联函数
整数常量类型规则
将声明和代码混合
long long 类型和库函数
snprintf() 函数家族
枚举声明中支持尾随逗号
可变参数宏
长度可变的数组
这两天因为某个需求,一直在研究这个问题。
网上都看了,什么ipv6 subnet daemon.json 之类的,都是一通抄,还是没有能说明白关键联系的,很多都是抄的碎片化信息。
因为说不清楚关联,所以就没法在实际环境中结合实际灵活解决问题。
docker的版本问题。初步结论是:docker engine 的版本大于等于20.10.2 。参见:https://zhuanlan.zhihu.com/p/342633966
经过验证,如果版本不对,在配置daemon.json时,就会报错,令人莫名, 实际是版本的ipv6支持问题,不支持新字段。
注意:系统默认的docker版本是跟这个系统的代码版本库走的,所以想要最新的docker版本,首先要确认自己的系统,否则要手动安装。
这个也是网上看到最多的:
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"experimental": true,
"ip6tables": true
}
在跳过了docker版本的坑,这里就可以配置了。这里核心的是那个fixed-cidr-v6, 很多人看不懂这个,不知道这个要怎么改,这个就要自己实际弄懂ipv6的子网了,要根据自己的外网IPV6地址,配置实际的子网段。参见 https://docs.docker.com/engine/daemon/ipv6/
docker inspect xxx
检查 Networks 字段,下面对应就是network的对象,如下例子就是 bridge:
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "xxx",
"EndpointID": "xxx",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "fd17::1",
"GlobalIPv6Address": "fd17::242:ac11:2",
"GlobalIPv6PrefixLen": 64,
"MacAddress": "xxx",
"DriverOpts": null
}
}
然后我们继续检查 bridge对ipv6的支持情况:
docker network inspect bridge
我们检查EnableIPv6字段:
"Name": "bridge",
"Id": "xxx",
"Created": "xxx",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": true,
如果是true,则证明此bridge网络已经支持ipv6
docker run --rm -it busybox ping -6 -c4 ipv6-test.com
docker run --rm -it busybox ifconfig
正常返回,就说明系统的docker ipv6能力正常
目标:通过密码从国内代理流量到国外(ssh)
略,通用配置
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh]
type = stcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh_visitor]
type = stcp
role = visitor
server_name = secret_ssh
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000
server_name sk 可以简单理解成frpc远端的账号密码。
ssh -oPort=6000 x.x.x.x(国内的ip)
效果相当于endpoint 中的脚本跟上cmd 中的参数
为了防止网络嗅探,一般拿到vps第一个就是关密码,开秘钥登陆
编辑 /etc/ssh/sshd_config 文件,注意是sshd_config,不要眼花看成成ssh_config
#开秘钥:
RSAAuthentication yes
PubkeyAuthentication yes
PubkeyAcceptedKeyTypes +ssh-rsa
#关密码:
PasswordAuthentication no
PermitRootLogin no # 可选:禁用root登录
UsePAM no # 可选:关闭PAM(简单场景)
.pem 是 openssh 格式的私钥
.ppk 是putty 格式的私钥
# 转换 .ppk 到 .pem
puttygen /path/to/your-key.ppk -O private-openssh -o /path/to/converted-key.pem
# 转换 pem 到 ppk
puttygen vkmainkey.pem -o vkmain.ppk -O private
注意证书默认 600 权限,否则提示安全告警
如果是 mac ,puttygen 需要安装 putty :brew install putty
ssh-keygen -y -f /path/to/your-key.pem > ~/.ssh/your-key.pub
最后记得重启ssh
systemctl restart ssh
首先网上大部分抄的内容都是围绕pubkey配置不对的内容,参考价值不大。
已经排查:
还是失败,对等其他主机配置的,都是可以的,同样的客户端配置操作。
解决思路:
userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
sshd -T | grep pubkeyacceptedalgorithms
pubkeyacceptedalgorithms ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256
可以看到没有 ssh-rsa
PubkeyAuthentication yes
PubkeyAcceptedKeyTypes +ssh-rsa
然后重启:systemctl restart ssh
sshd -T | grep pubkeyacceptedalgorithms
pubkeyacceptedalgorithms ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa
在尾部已经发现ssh-rsa了
总结:因为ubuntu是最新的版本,因为安全原因,默认把 ssh-rsa禁用了。所以根据此思路,如果我们有时间,我们还可以从升级客户端的配置来场景解决
在某些自动化脚本中,需要安装ssl证书时,可能会出现如下的提示:
[Sat Oct 15 10:28:50 AM UTC 2022] Using CA: https://acme.zerossl.com/v2/DV90 [Sat Oct 15 10:28:50 AM UTC 2022] Create account key ok. [Sat Oct 15 10:28:50 AM UTC 2022] No EAB credentials found for ZeroSSL, let's get one [Sat Oct 15 10:28:50 AM UTC 2022] acme.sh is using ZeroSSL as default CA now. [Sat Oct 15 10:28:50 AM UTC 2022] Please update your account with an email address first. [Sat Oct 15 10:28:50 AM UTC 2022] acme.sh --register-account -m my@example.com [Sat Oct 15 10:28:50 AM UTC 2022] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA [Sat Oct 15 10:28:50 AM UTC 2022] Please add '--debug' or '--log' to check more details. [Sat Oct 15 10:28:50 AM UTC 2022] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh 2022-10-15 10:28:50 - 申请证书失败,请尝试手动申请证书.
看很多网上搜索说什么指令 letsencrypt之类的解决方法。
其实log已经提示方案了:
apt install socat
curl https://get.acme.sh | sh
acme.sh --register-account -m my@example.com
脚本失败后,可以先单独安装acme,执行如上操作,测试可以单独成功,比如
sudo ~/.acme.sh/acme.sh --issue -d mydomain.com --standalone -k ec-256
确认可以成功后,在重新执行脚本,基本就能解决问题。
ubuntu下,在-v参数映射时,出现 read-only file system
解决:默认是支持home下的路径
Rust 官方网站:https://www.rust-lang.org/zh-CN
Rust 官方文档:https://doc.rust-lang.org/
Rust Play:https://play.rust-lang.org/
svn propedit -r r3214 --revprop svn:log
r3214:当前提交的commit id
类型 | 值 |
---|---|
Chap | 2 |
None | 0 |
Pap | 1 |
PapOrChap | 3 |
git conflict 是日常协作中必不可少的。
在gitlab的web页面上,有三种处理conflict的视图,其中line的文本方式最灵活。
这种方式中:
其中<<<<<<< HEAD 到 ======= 中间的内容是local提交的。
======= 到 >>>>>>> commit-id 是远程仓库中的内容。
示例:
<<<<<<< HEAD
新提交的代码xxx
=======
远程仓库的代码xxx
>>>>>>> commit-id
和 i2c_set_clientdata 配对使用,简单说,就是通过这两个接口来在驱动的回调中获取用户私有的结构体指针。
/**
value on the error condition.
/
static inline int of_get_gpio(const struct device_node np, int index)
{
return of_get_gpio_flags(np, index, NULL);
}
这个index 表示gpios节点的索引位置,gpios支持多个节点,每个节点由<gpio_chip gpio_num default_level>
eg:
gpios = <&ap_gpio 145 0 &ap_gpio 144 0>;
网络制式定义,不局限于安卓。
ro.telephony.default_network
可选值:
/* NETWORK_MODE_* See ril.h RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE */
int NETWORK_MODE_WCDMA_PREF = 0; /* GSM/WCDMA (WCDMA preferred) */
int NETWORK_MODE_GSM_ONLY = 1; /* GSM only */
int NETWORK_MODE_WCDMA_ONLY = 2; /* WCDMA only */
int NETWORK_MODE_GSM_UMTS = 3; /* GSM/WCDMA (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_CDMA = 4; /* CDMA and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_CDMA_NO_EVDO = 5; /* CDMA only */
int NETWORK_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
int NETWORK_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_LTE_CDMA_EVDO = 8; /* LTE, CDMA and EvDo */
int NETWORK_MODE_LTE_GSM_WCDMA = 9; /* LTE, GSM/WCDMA */
int NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
int NETWORK_MODE_LTE_ONLY = 11; /* LTE Only mode. */
int NETWORK_MODE_LTE_WCDMA = 12; /* LTE/WCDMA */
int NETWORK_MODE_TD_SCDMA_ONLY = 13; /* TD-SCDMA only */
int NETWORK_MODE_TD_SCDMA_WCDMA = 14; /* TD-SCDMA and WCDMA */
int NETWORK_MODE_TD_SCDMA_LTE = 15; /* TD-SCDMA and LTE */
int NETWORK_MODE_TD_SCDMA_GSM = 16; /* TD-SCDMA and GSM */
int NETWORK_MODE_TD_SCDMA_GSM_LTE = 17; /* TD-SCDMA,GSM and LTE */
int NETWORK_MODE_TD_SCDMA_GSM_WCDMA = 18; /* TD-SCDMA, GSM/WCDMA */
int NETWORK_MODE_TD_SCDMA_WCDMA_LTE = 19; /* TD-SCDMA, WCDMA and LTE */
int NETWORK_MODE_TD_SCDMA_GSM_WCDMA_LTE = 20; /* TD-SCDMA, GSM/WCDMA and LTE */
int NETWORK_MODE_TD_SCDMA_CDMA_EVDO_GSM_WCDMA = 21; /*TD-SCDMA,EvDo,CDMA,GSM/WCDMA*/
int NETWORK_MODE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA = 22; /* TD-SCDMA/LTE/GSM/WCDMA, CDMA, and EvDo */
嵌入式中,我们可以通过x509证书来实现tcp+tls或者https,那么如何处理过期的问题呢?
这个过程对终端都是类似的行为,下载,更新,但是根据服务器实现的技术不同,可以分为以下两种:
当没屏幕时,通过adb调节音量就有用了:
set:
adb shell media volume --show --stream 0 --set 15
get:
adb shell media volume --stream 0 --get
stream 类型参考
AUDIO_STREAM_VOICE_CALL = 0,
AUDIO_STREAM_SYSTEM = 1,
AUDIO_STREAM_RING = 2,
AUDIO_STREAM_MUSIC = 3,
AUDIO_STREAM_ALARM = 4,
AUDIO_STREAM_NOTIFICATION = 5,
AUDIO_STREAM_BLUETOOTH_SCO = 6,
AUDIO_STREAM_ENFORCED_AUDIBLE = 7,
AUDIO_STREAM_DTMF = 8,
AUDIO_STREAM_TTS = 9,
AUDIO_STREAM_ACCESSIBILITY = 10
作为十多年的c开发者,仍然可以找到知识的细节和盲区,推荐给每一个c的学习者
目前暂无定位结果,暂怀疑是内存问题,待定位了再来更新。