之前一直为笔记本的驱动找不到合适的驱动,现在,有这么一个网站:
https://cateee.net/lkddb/
据官网介绍可以解决这个问题,不知道是真的还是假的
在真的机子上debian的内核一次没有配置成功,我要用两天的时间把配置的内容探个究竟。
在编译内核之前最好使用
make mrproper
清扫一下。
我使用的是git,clone的linus的版本,一切准备妥当后,我们要选择合适的配置工具。 我选的是 make menuconfig,注意无论哪一种都需要相应的软件包。
在配置前的方括号中按下“y”,就是built-in,这是将相关代码编译进内核,默认与目标机相关的硬件的代码必须内建进内核,这些东西就如同人的基本器官,不可无;另一种就是M,这是将相关的选项编译成模块,这样就可以是编译的内核的体积不过于太大,精简内核是我们必须掌握的知识点;最后一种就是按下”space”,什么也不做,就是回答“no”。
内核的发展太快了,当我写这篇文章的时候,代码还可以是最新的(git pull),但是很快就update的,不过,有些东西是不会变动太大。
注意这篇文章:
http://lwn.net/Articles/531114/
http://unix.stackexchange.com/questions/92177/kernel-namespaces-support
CAN总线 编辑 同义词 CAN-BUS一般指CAN总线 CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。[1]
红外线协议
射频那块的东西
杂项设备 杂项设备(misc device) 杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include\linux目录下有Miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的。 也就是说,misc设备其实也就是特殊的字符设备。
来自百度知道:
https://zhidao.baidu.com/question/354123482.html
Media Transfer Protocol
光纤式分布
放假了,这个学校又一次只剩自己了,曾经对自己说过,不会自己独自一人在学校了,可是当现实无情逼近的时候,我发现还是学校能帮助自己.记住,我在这里,是为了更美好的梦想,所以你并不会孤单、寂寞。因为你有这个世界,你是他们的一员,更何况,你有个非常好的女朋友,你吃的这份苦,也是为了她,或者说,你只有承受更大的责任,才会给她美好的未来,加油,你不仅仅是一个人了。
0s表示一串0, 1s表示一串1.
x ^ 0s = x x & 0s = 0 x | 0s = x
x ^ 1s = ~x x & 1s = x x | 1s = 1s
x ^ x = 0 x & x = x x | x = x
位屏蔽(bitmask): 所谓位屏蔽(bitmask)就是利用一个二进制字串与已有的二进制字串 进行(AND)运算,通过结果知道原二进制字串中的特定位上有没有1.例如,二进制10011有 五个位,屏蔽码是10,则
10011
AND 00010
---------------
00010 > 0(不等于0),
说明在原始数据倒数第二位有数据1,而屏蔽码1000的运算结果 10011 AND 01000 = 00000,说明倒数第四位是数据0,没有该选项.
n&(n-1) 去除 n 的位级表示中最低的那一位。例如对于二进制表示 10110100,减去 1 得到 10110011,这两个数相与得到 10110000。 n&(-n) 得到 n 的位级表示中最低的那一位。-n 得到 n 的反码加 1,对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。 n-n&(~n+1) 去除 n 的位级表示中最高的那一位。
这个操作符是进行与操作的,常规来说,很简单就是与0相与得0,其余都得1.
作用集中在三个方面:
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note: 0 ≤ x, y < 2^31.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
int count_bit_1(int n){
unsigned int count = 0;
while(n){
count += n & 1;
n >>= 1;
}
return count;
}
int count_bit_0(int n)
{
unsigned int rc = 0;
while(n){
rc += !(n & 1);
n >>= 1;
printf("the n is %d\t", rc);
}
return rc;
}
上面就是统计一个整型数字中的0和1的个数。
461最终结果:
int hammingDistance(int x, int y) {
int c = x ^ y;
unsigned int count = 0;
while(c){
count += c & 1;
c >>= 1;
}
return count;
}
这个亦或操作在CSAPP经典著作中也有详解,这里简单记录一下。直观上说,就是如果两个数字(0或者1)相同得1,不相同为0,为什么这样呢?这篇文章可以看一下,就是说,在计算机的器件中,期初没有负责进位标志的东西,那么,这个加法操作可以借助”^”来实现。
int add(int a, int b)
{
if (a == 0)
return b;
if (b == 0)
return a;
int p1 = a&b;//位与。
p1 = p1 << 1;//这两句只考虑进位
int p2 = a^b;//位异或。不考虑进位
return add(p2, p1); //结束的标志是a为0了,或者b为0了
}
int main()
{
int x = 3, y = 2;
int sum = 0;
sum = add(x,y);
cout << sum << endl;
}
看到没,这就是基本逻辑,在add()函数中,p2 = a^b,如果有进位,就不用管它。比如 0+0=0, 0+1 = 1, 1+0 = 1, 1 +1 = 0。看到没,1+1 是等于0 的,那么进位呢?进位靠 & 运算来实现,p1 只考虑进位,也就是说,如果 1 + 1 结果是 1, 但是此时的这个1应该往前面进一位,变成 10, 所以,有了p1 = p1 « 1。那么,到什么时候结束呢?只有一种可能,没有进位了,也就是说 p1 为0 了,那么此时的加法结果就是不考虑进位的p2 了。 最后,解释一下为什么要递归 add()函数。实际上, 函数只需要执行两次就够了,执行到第二次的时候,我们就能保证P1 移位以后,为0. 此时,返回 p2 即可。所以,代码还可以这样优化:
性质:
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1] Output: 1 Example 2:
Input: [4,1,2,1,2] Output: 4
这个题目就是利用了异或的操作。
int singleNumber(int* nums, int numsSize) {
int i, ret = 0;
for(i = 0; i < numsSize; i++){
ret ^= nums[i];
}
return ret;
}
strace是一个优秀的调试工具,它调用的是系统函数ptrace(),缺点是导致应用程序运行的非常慢。
strace -e open target-file
strace -o out ls
# Slow the target command and print details for each syscall:
strace command
# Slow the target PID and print details for each syscall:
strace -p PID
# Slow the target PID and any newly created child process, printing syscall details:
strace -fp PID
# Slow the target PID and record syscalls, printing a summary:
strace -cp PID
# Slow the target PID and trace open() syscalls only:
strace -eopen -p PID
# Slow the target PID and trace open() and stat() syscalls only:
strace -eopen,stat -p PID
# Slow the target PID and trace connect() and accept() syscalls only:
strace -econnect,accept -p PID
# Slow the target command and see what other programs it launches (slow them too!):
strace -qfeexecve command
# Slow the target PID and print time-since-epoch with (distorted) microsecond resolution:
strace -ttt -p PID
# Slow the target PID and print syscall durations with (distorted) microsecond resolution:
strace -T -p PID
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count)
#mknod
mknod [opiton] NAME TYPE [major num] [minor num]
mknod /dev/memory c 60 0
因为debian在自带的python为2.7,在执行其他的一些东西时会碰上各种各样的问题,所以,升级版本是唯一的选择.
1、下载python3.3安装包
wget http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz
2、解压安装包
tar -zxvf Python-3.3.0.tgz
3、进入解压后目录
cd Python-3.3.0
4、创建安装目录
mkdir /usr/local/python3.3
5、编译安装
./configure --prefix=/usr/local/python3.3
6、执行
make
make install
7、此时已完成新版本的安装,但由于老版本还在系统中,所以需要将原来/usr/bin/python链接改为新的连接: 先修改老的连接,执行
mv /usr/bin/python /usr/bin/python_bak
再建立新连接
ln -s /usr/local/python3.3/bin/python3.3 /usr/bin/python
8、查询python版本,执行:
python --version
现在主流系统不推荐使用这种方法了,但是有时候为了方便,会简单的使用一下,比如,我的这篇文章install django,但是当我日后想要卸载旧版的 Django遇上问题了,不知道使用的哪个方法安装的,现在简单的记录下:
可以再重新安装一遍,找到egg包。
sudo easy_install install -m django
# 在输出的界面上有这个egg的位置
rm -rf path-sth-egg
这两篇文章有点相互引用的味道,够了。
here,在这篇文章里,人家给了一个比较好的原因说使用pip,下面看看怎么使用吧。
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
# 注意,使用 pip install -U pip检查最新的pip版本
这里多说一句,你觉得是不是应该将python设置最新的?不一定的,但是更新最新版本,有好处。django最新版本,就是面向了python 3.6
这个软件可以使用 “uninstall”选项,甚至可以删除easy_install
软件安装的包。
使用Django软件啥的,就需要一个虚拟环境,这个环境就是系统的一个位置,你可以在其中安装包,并将其与其他Python包分离,这样做是有益的。
书上说,python 3 以上可以直接使用
python -m venv ll_env
来建立虚拟环境但是在我的机器上有些问题,现在先放下[question].
可以使用virtualenv包,这样就问题不大了。
pip install --user virtualenv
下面就是建立一个目录mysite, 然后创建一个虚拟环境.
cd my_project_folder
virtualenv ll_env
# 激活
source ll_env/bin/activate
这个命令执行后,会在本地生成一个与ll_env 的文件夹,包含python的可执行文件和pip库的拷贝,可用于安装其他包。
但是有时候你想使用系统中其他的包,在虚拟环境下你是无法使用的。如果在系统环境中想要使用系统环境的第三方的软件包,可以在创建虚拟环境的时候使用 -system-site-packages
参数。
virtualenv --system-site-packages
还可以制定python的版本,当然前提是你的系统中已经安装了相应的python。
virtualenv -p /usr/bin/python2.7 env
deactivate
但是还有问题怎么办?比如我的就是有问题了,上面的命令不好使,我自己的解决方案就是再装一遍:
pip install --user virtualenv
这时候你会看到那个virtualenv.py文件在哪了,接着使用:
python path-virtualenv dest-dir
这样就可以了。