0%

为什么要用交叉编译器?

交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在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 {} \;

CPU是什么

中央处理单元(CPU)主要由运算器、控制器、寄存器三部分组成,从字面意思看运算器就是起着运算的作用,控制器就是负责发出CPU每条指令所需要的信息,寄存器就是保存运算或者指令的一些临时文件,这样可以保证更高的速度。

CPU有着处理指令、执行操作、控制时间、处理数据四大作用,打个比喻来说,CPU就像我们的大脑,帮我们完成各种各样的生理活动。因此如果没有CPU,那么电脑就是一堆废物,无法工作。移动设备其实很复杂,这些CPU需要执行数以百万计的指示,才能使它向我们期待的方向运行,而CPU的速度和功率效率是至关重要的。速度影响用户体验,而效率影响电池寿命。最完美的移动设备是高性能和低功耗相结合。

CPU的架构

从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。

Intel和ARM处理器的第一个区别是,前者使用复杂指令集(CISC),而后者使用精简指令集(RISC)。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。

我们可以继续举个例子,比如说我们要命令一个人吃饭,那么我们应该怎么命令呢?我们可以直接对他下达“吃饭”的命令,也可以命令他“先拿勺子,然后舀起一勺饭,然后张嘴,然后送到嘴里,最后咽下去”。从这里可以看到,对于命令别人做事这样一件事情,不同的人有不同的理解,有人认为,如果我首先给接受命令的人以足够的训练,让他掌握各种复杂技能(即在硬件中实现对应的复杂功能),那么以后就可以用非常简单的命令让他去做很复杂的事情——比如只要说一句“吃饭”,他就会吃饭。但是也有人认为这样会让事情变的太复杂,毕竟接受命令的人要做的事情很复杂,如果你这时候想让他吃菜怎么办?难道继续训练他吃菜的方法?我们为什么不可以把事情分为许多非常基本的步骤,这样只需要接受命令的人懂得很少的基本技能,就可以完成同样的工作,无非是下达命令的人稍微累一点——比如现在我要他吃菜,只需要把刚刚吃饭命令里的“舀起一勺饭”改成“舀起一勺菜”,问题就解决了,多么简单。这就是“复杂指令集”和“精简指令集”的逻辑区别。

阅读全文 »

树莓派基础设置

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

选通用的101键PC键盘

在键盘layout选择中,选Other

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

再选English(US, alternative international)

一直下一步,最后重启

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

sudo raspi-config

boot option ->console
阅读全文 »

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

阅读全文 »

函数的调用信息是程序中比较重要运行期信息, 在很多场合都会用到(比如调试或日志)。

Go 语言 runtime 包的 runtime.Caller / runtime.Callers / runtime.FuncForPC 等几个函数提供了获取函数调用者信息的方法.

这几个函数的文档链接:

runtime.Caller的用法(常用)

函数的签名如下:

1
func runtime.Caller(skip int) (pc uintptr, file string, line int, ok bool)

runtime.Caller 返回当前 goroutine 的栈上的函数调用信息. 主要有当前的pc 值和调用的文件和行号等信息. 若无法获得信息, 返回的 ok 值为 false.

阅读全文 »

循环内goroutine使用闭包

1
2
3
4
5
6
7
8
func main() {                
s := []string{"a", "b", "c"}
for _, v := range s {
go func() {
fmt.Println(v)
}()
}
}

改进:

1
2
3
4
5
6
7
8
func main() {                
s := []string{"a", "b", "c"}
for _, v := range s {
go func(v string) {
fmt.Println(v)
}(v)
}
}
阅读全文 »

什么是rebase

Rebase对于很多人来说是一个很抽象的概念,也因此它的学习门槛就在于如何了解这个抽象的概念。对于rebase 比较恰当的比喻应该是「移花接木」,简单来讲把你的分支接到别的分支上,稍后我们用几个图来示范merge与rebase 的差异。

了解rebase之前,我们必须了解什么是base。对Git的使用者而言,在分支中进行开发活动是稀松平常的事情,也因此在合并管理分支时,也就需要了解分支是在哪个时间点哪个提交点分出来的旁支,而长出旁支来的提交点,对于旁支来说就是base commit,也就是base。所以简单来说,rebase其实就是改变分支的base的功能。

下图是在merge的情况会产生的版本演进的示意图,可以看到在新的分支中所做的变更,在合并之后,一并成为一个新的提交(commit 6)。而commit 1就是New Branch的base。

1

阅读全文 »

下载release版本

https://github.com/OpenVPN/easy-rsa/releases

配置公钥基础设施变量

1
2
cp vars.example vars
vim vars

修改内容示例

1
2
3
4
5
6
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "BeiJing"
set_var EASYRSA_REQ_CITY "BeiJing"
set_var EASYRSA_REQ_ORG "Wise Innovation Inc."
set_var EASYRSA_REQ_EMAIL "user@mail.com"
set_var EASYRSA_REQ_OU "Wise Innovation"
阅读全文 »

linux 安装 ftp 服务

1 . 安装ftp

1
sudo apt-get install vsftpd
  1. 修改配置 sudo vi /etc/vsftpd.con
1
2
3
local_root=/home/ftpuser
write_enable=YES
anon_mkdir_write_enable=YES
  1. 添加ftp用户
1
2
3
mkdir /home/ftpuser
sudo useradd -d /root/workspace -M ftpuser
sudo passwd ftpuser
  1. 调整文件夹权限
1
2
chown ftpuser:ftpuser  /home/ftpuser/
sudo chmod a-w /home/ftpuser
  1. 修改pam.d/vsftpd
1
2
3
sudo vi /etc/pam.d/vsftpd
#auth required pam_shells.so //注释掉这一行
sudo service vsftpd restart
  1. 连接
1
2
3
ftp://207.246.80.69  //通过浏览器访问

mac 可以下载 filezilla 客户端进行连接
阅读全文 »