Levon's Blog

微信: L6241425

YAML介绍

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。它的基本语法规则如下。

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

YAML 支持的数据结构有三种。

  • 对象:键值对的集合(map)
  • 数组:一组按次序排列的值(array)
  • 纯量(scalars):单个的、不可再分的值
阅读全文 »

1. 信号

1.1 产生信号的条件

  • 用户在终端按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C产生SIGINT信号,Ctrl-\产生SIGQUIT信号,Ctrl-Z产生SIGTSTP信号。
  • 硬件异常产生信号,这些条件由硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前进程执行了除以0的指令,CPU的运算单元会产生异常,内核将这个异常解释为SIGFPE信号发送给进程。再比如当前进程访问了非法内存地址,,MMU会产生异常,内核将这个异常解释为SIGSEGV信号发送给进程。
  • 一个进程调用kill(2)函数可以发送信号给另一个进程。
  • 可以用kill(1)命令发送信号给某个进程,kill(1)命令也是调用kill(2)函数实现的,如果不明确指定信号则发送SIGTERM信号,该信号的默认处理动作是终止进程。
  • 当内核检测到某种软件条件发生时也可以通过信号通知进程,例如闹钟超时产生SIGALRM信号,向读端已关闭的管道写数据时产生SIGPIPE信号。
阅读全文 »

先看一个例子:

1
2
export CFLAGS="-I/root/ARM/opt/include"
export LDFLAGS="-L/root/ARM/opt/lib"

CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。

LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它愣是说找不到,可以抒那个包的lib路径加入的LDFALGS中试一下。

LIBS:告诉链接器要链接哪些库文件,如LIBS = -lpthread -liconv

阅读全文 »

1. 编译平台准备工作

  1. 下载arm-none-linux-gnueabi-gcc

  2. 下载transmission-2.94

  3. 新建ARM文件夹

  4. 解压arm-none-linux-gnueabi-gcc和transmission-2.94到ARM文件夹

  5. 设置编译平台环境变量

    1
    2
    3
    export PATH="/root/ARM/external-toolchain/bin:$PATH"
    export cross=arm-none-linux-gnueabi-
    export CC="${cross}gcc"
  6. 编译的时候一定要注意看log, 是arm-none-linux-gnueabi-gcc编译的才是正确的

阅读全文 »

为什么要用交叉编译器?

交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小 libc 库大小的考虑,也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。

建立交叉编译工具链是一个相当复杂的过程,如果不想自己经历复杂繁琐的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载,但就以学习为目的来说读者有必要学习自己制作一个交叉编译工具链(目前来看,对于初学者没有太大必要自己交叉编译一个工具链)。

阅读全文 »

1. 使用 xargs rm

1
ls | grep abcd | rm  //错误用法

rm doesn’t accept input from stdin. You’ll need to do something like

1
ls | grep abcd | xargs rm

但是遇到不规则符号的文件有可能删除不了.

2. 使用 find exec

可以删除不规则符号文件:

1
find . -name "*td*" -exec rm -f {} \;

树莓派基础设置

树莓派修改键盘布局
1
sudo dpkg-reconfigure keyboard-configuration

选通用的101键PC键盘

在键盘layout选择中,选Other

然后在选项中,选English(US)

再选English(US, alternative international)

一直下一步,最后重启

1
sudo reboot
树莓派修改启动进入终端界面
1
2
3
4
5

sudo raspi-config

boot option ->console

阅读全文 »

芯片(Chip) 是物理形态。它是指那一小块黑色的、有引脚的半导体封装体。CPU(Central Processing Unit) 是功能定义。它是指计算机中负责解释指令和处理数据的核心逻辑单元。

关系: 芯片是 CPU 的物理载体,但芯片不等于 CPU。

  • 以前,CPU 就是一块独立的芯片。那栋 “ 房子 “ 里只住了 “ 总经办 “ 这一个部门。所以那时候指着芯片说 “ 这是 CPU” 是完全准确的。
  • 现在情况变了。为了便携和高性能(比如你的手机或 Apple M 系列电脑),工程师把 CPU(总经办)、GPU(绘图部)、NPU(AI 部)、Memory(档案室)全部塞进了同一块芯片里。
  • 现在的芯片(SoC) = CPU + GPU + 内存控制器 + 其他。
阅读全文 »

1. mac编译transmission

  • 下载项目
1
2
3
4
git clone https://github.com/transmission/transmission Transmission
cd Transmission
git submodule update --init
Xcode project file (Transmission.xcodeproj) for building in Xcode.
  • 在 xcode中编译

    下图第一个是编译 mac 的应用程序, 第二个是可以编译 transmission-daemon 程序

1

阅读全文 »
0%