Linux内核更新boot分区问题
Linux内核更新boot分区问题
ubuntu上由于开始装机(双系统)时设置的boot分区只有181M,更新几下内核空间就不够了,每次内核更新都会遇到该问题,遂总结如下:
一般步骤
该方法适合boot分区还剩下一点(几M)空间时使用
查看当前boot分区剩余空间:
1df -h /boot
查看当前使用的内核版本
1uname -a
查看已安装的内核版本
12345dpkg --get-selections |grep linux-image#或dpkg -l 'linux-image-*' | grep '^ii'#或dpkg -l | grep 'linux-'
删除多余的内核文件,减少/boot分区占用
1sudo apt purge linux-xxx(linux镜像文件)
/boot分区已满
该方法适合boot分区一点(几M)空间都不剩时使用
查看当前boot分区剩余空间:
1df -h /boot
查看当前使用的内核版本
1uname -a
查看已安装的内核版本
12 ...
Linux下生成固定USB转串口设备节点
Linux下生成固定USB转串口设备节点
以USB转串口设备通常的设备节点名为ttyUSBx(x为0~n),Linux内核会根据设备插入的先后顺序进行编号的分配,比如第一个插入的设备编号为ttyUSB0,然后依此加1,变为ttyUSB1,ttyUSB2……
如果仅仅以设备节点ttyUSBx来区别具体是哪个设备,因为末位的编号是随时会变的,所以就会造成混乱。无法保证A设备就是ttyUSB0,B设备就是ttyUSB1。在设备文件/dev目录下并没有提供固定显示ttyUSB的方法,但是,每个USB端口都有唯一的端口号,相当于每个门店的门牌号。只要我们依据端口号来进行设备的区分,那么问题就迎刃而解了。简单点来说就是找到端口号,然后根据端口号找到挂载在这个端口号上面的USB设备是ttyUSB0还是 ttyUSB1即可
端口号
通过以下命令可以查看端口号:
123ls -l /sys/class/tty/ttyUSB*lrwxrwxrwx 1 root root 0 6月 25 16:02 /sys/class/tty/ttyUSB0 -> ../../devices/pci0000:00 ...
从C到C++
从C到C++
一、介绍
C++是对C语言的扩展,C语言程序也是C++程序。
C/C++程序只执行叫做main()的主函数。
123int main(){ return 0;}
编译器:g++(linux)、clang、 Visual Studio C++ Compiler
12g++ -c file.cppg++ -std=C++17 -c file.cpp -o prog
二、标准库、注释、条件编译
C++中包含了C标准库的移植版本,C标准库的头文件x.h基本上变成了cx。但也有例外,如malloc.h仍然没变
stdio.h在C+.+中对应的是cstdio、 math. h变成了cmath、 string. h变成了 cstring
注释与C中一致
条件编译与C中一致
1234567#if xxx...#elif...#else...#endif
三、标准输入输出、命名空间
标准输入输出头文件:#include<iostream>(派生出的一些其他流:文件流#include<fstream>)
cout是一个标准输出流变量(对象 ...
Linux内核调试输出
Linux内核调试输出
老是忘记,遂总结如下
输出等级
一般在内核中,调试输出函数为printk,用法同printf,但是printk输出的信息具有日志级别,日志级别是通过在printk()输出的字符串前加一个带尖括号的整数来控制的,如printk("<6>Hello, world!/n");或printk(KERN_INFO "Hello, world!/n");。内核中共提供了八种不同的日志级别,在linux/kernel.h中有相应的宏对应:
12345678910#define KERN_EMERG KERN_SOH "0" /* system is unusable */#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */#define KERN_CRIT KERN_SOH "2" /* critical conditions */#define KERN_ERR KERN_SO ...
Linux内核模块通信
Linux内核模块通信
Linux模块间通讯方法非常的多,最便捷的方法莫过于函数符号导出,然后直接调用。
然而在linux2.6.26以后的内核中模块的符号导出经常会出现问题,一个模块中的导出符号不能被另外一个模块进行调用。这个使得处理有依赖关系的模块非常的头疼。
符号导出函数
EXPORT_SYMBOL():括号中定义的函数对全部内核代码公开
EXPORT_SYMBOL_GPL():和EXPORT_SYMBOL类似,但范围只适合GPL许可的模块进行调用
使用方法
加入B中调用A中导出函数:
在模块A中c文件或者头文件中使用EXPORT_SYMBOL(xxxx)导出函数(有些需要添加编译选项-DEXPORT_SYMTAB)
在模块B中用关键字extern申明函数,申明以后能够直接使用导出的函数
在导出函数以后,可以使用cat /proc/kallsyms来查看所有的导出符号,其中属性为T的标识是不能被调用的,所以如果导出符号是T类型,那么无法直接被其他模块使用
无法导出问题解决
方法一: 在A模块编译好后会生成符号表文件Module.symvers,里面有函数地址和函数名对 ...
SVM数学推导
SVM(线性模型)数学推导
作者:zihuanqiu
学习路线:先线性二分类解释清楚,再加入核方法扩展至非线性二分类
几个重要的概念
训练样本集
(xi,yi)(\boldsymbol{x}_i,y_i)(xi,yi),其中xi\boldsymbol{x_i}xi为nnn维列向量,表示nnn维特征;yiy_iyi为标签,当yi=+1y_i=+1yi=+1时为正样本,yi=−1y_i=-1yi=−1时为负样本。
则训练样本集为:D={(x1,y1),(x2,y2),⋯ ,(xm,ym)},y∈{−1,+1}D=\left\{\left(\boldsymbol{x}_{\boldsymbol{1}},y_1 \right),\left(\boldsymbol{x}_2,y_2\right),\cdots,\left(\boldsymbol{x}_m,y_m\right)\right\},y\in\left\{-1,+1\right\}D={(x1,y1),(x2,y2),⋯,(xm,ym)},y∈{−1,+1}
什么叫超平面
如上图,若在二维空间内(两个特 ...
ESP32
一、硬件配置
ESP32-CAM:
核心貌似是ESP-32S(ESP32-WROOM-32)模组
两个低功耗 Xtensa® 32-bit LX6 MCU,主频高达 240MHz, 运算能力高达 600 DMIPS,小端序
字节地址 0x0、 0x1、 0x2、 0x3 访问的字节分别是 0x0 访问的 32-bit字中的最低、次低、次高、最高字节
RAM:片内520 KB SRAM,片外8MB PSRAM
RTC中8 KB SRAM(RTC慢速存储器),Deep-sleep模式下被协处理器访问
RTC中8 KB SRAM(RTC快速存储器),Deep-sleep模式下RTC启动时用于数据存储以及被主CPU访问
1kbit eFuse,其中256bit为系统专用(MAC 地址和芯片设置)其余 768bit保留给用户应用,包括Flash加密和芯片ID
ROM:片内448 KB ROM(用于程序启动和内核功能调用),片外32Mbit SPI Flash(4MB)
支持UART、 SPI、 I2C、 PWM
TF卡最大支持4G
供电:4.75-5.25V
...
C和GO的语法对比
C和GO的语法对比
具体转自阿莫论坛、备份地址
C
GO
说明
变量声明
int a;
Var a Int
C:变量类型+变量名字Go:var+ 变量名字+变量类型
变量声明 并初始化
int a=10;
Var a Int=10
C:变量类型+变量名字=表达式Go:var+变量名字+ 变量类型=表达式
变量初始化时不指定类型
不支持
Var a=10
变量类型由编译器来推导
短变量声明并初始化
不支持
a:=10
变量类型由编译器来推导
多变量声明
不支持
name,age:=“pengwang”,18 var( name= “pengwang” age= 18)
字符
Chars=‘a’
varsbyte=‘a’
char, byte等同于int8,占用1个字节
字符串
CharsO=“123456”
var sstring= “123456”
c中采用字符数组来表示字符串,没有特定的变量名称;go中用sting 变量类型,sting 底层也是byte数组
rune
不支持
I 支持
Go语言中rune等同于in ...
TensorFlow2入门与实践
TensorFlow2入门与实践
深度学习基础和 tf.keras
顺序模型:有一个输入和一个输出,他们之间的网络是顺序搭建的
Dense层:即y=ax+b
输出维度
None为输入数据的数量
input_shape:输入维度
123456789101112131415import tensorflow as tfmodel = tf.keras.Sequential() # 顺序模型model.add(tf.keras.layers.Dense(1, input_shape=(1,)))# 向模型中添加添加层(Dense层)model.summary() # 查看模型Model: "sequential"_________________________________________________________________Layer (type) Output Shape Param # ================================================ ...
ESP8266
基础知识
乐鑫官网及乐鑫官网ESP8266资料
ESP8266模块安信可官网
本人使用的NodeMcu相关信息:
开源地址,主模块为ESP-12E(与ESP-12F一致,区别为ESP-12E为双层板,ESP-12F四层板,详见安信可的旧选型表),32MBit(25Q32,4MB)
NodeMcu官方烧录器地址,第三方基于wxPython制作带GUI的烧录器
NodeMcu官方固件(可以使用lua脚本编程,该固件的参考文档,以及第三方学习笔记(github访问不了可以通过该博客链接))
引脚图
CPU、存储和Flash:
更多详细信息请看datasheet
CPU时钟最高可达16MHz
外部晶振在24MHz~52MHz之间
内置ROM和SRAM。芯片内无可编程存储器,用户程序必须由外部Flash存储
理论上外部Flash最大支持16MB(128Mbit)
支持TCP/IP完全遵循802.11 b/g/n WLAN MAC协议和Wi-Fi Direct标准
使用方式:
AT指令模式:当做从机,响应主机的AT指令来执行对应的命令
SDK编程模式:乐鑫官网提供 ...