本次blog只讲8个事情,主要包括内核、进程、规范等话题。

1. kernel编译ko

kernel如何去编译一个.ko文件? 请看如下的Makefile

obj-m:=helloworld.o 
mymodule-objs:=module  
KDIR?=
default:
	make -C $(KDIR) SUBDIRS=$(PWD) modules  
clean:
	make -C $(KDIR) SUBDIRS=$(PWD) clean

 在make时刻只需要增加KDIR的参数传递即可,再补充灵魂-j999

make KDIR=/kernel/ -j999

 

2. epoll监听文件

可以说epoll大体上作为IO的监听的主体,动不动来一个socket监听,形成一个十万级别的客户端接入,但可以让你头疼在监听一个GPIO,因为

GPIO你只能看电平value高低,看似没用,其实不然,GPIO也有它的特性-中断配置-EDGE,在这个里面存在四个选项:

none,rising,falling,both

通常none,epoll是没有反应的,当作普通文件,说白了epoll是没法监听普通的文件的。

 

3. shell注释多行

这个shell注释非常简单,#oh my,即可,突然发现/**/更加舒服,但是shell也要多行注释,搜了下发现: ' '

: '

’

记住,看到的间隙都是空格。

 

4. 进程间通讯

进程间可以实现多种的通讯方式,如消息队列(非必要不用,会爆仓),管道(很多时候不用),socket(经常用),共享内存(过于高级,不舍得用)等等,其实可以有一些活用,例如消息队列进程间提供线程使用,共享内存也如此。

 

5. git merge

当你开发master一个而已,不需要merge,当bugfix 需要开很多个branch,那么经常性的merge很必要,merge master或者 merge bugfix 分支,merge更加体现修复问题的清晰,方便团队开发。

 

6. 制作.so 文件实现

#!/bin/sh
#add arm arm-linux-gnueabi-gcc
#arm-linux-gnueabi-gcc -fPIC -c socket.c
#arm-linux-gnueabi-gcc -fPIC -shared -o libsocket.so socket.o

gcc -fPIC -c socket.c
gcc -fPIC -shared -o libsocket.so socket.o
#cp libsocket.so /lib -fa
gcc main.c -o test -lsocket
echo "built done"

 -fPIC 作为制作动态库.so的条件。

 

7. 编程规范守则细聊-杜绝更多if-else 或者 else

当你需要找一个电脑,电脑系统是linux的,运行快的。

此处存在三个条件,通常的情况如下:

if ( product == computer )
{
    if ( system == linux )
    {
        if ( speed == fast )
        {
        }
    }
}

 能写两行坚决不写一行,show me the code ,  dont talk too much.

if ( product != computer )
{
    return -1;
}

if ( system != linux )
{
    return -1;
}

if (speed != fast )
{
    return -1;
}

 尽可能跳出来,让别人debug更加容易,可读性也强了,else到底去哪里了。

 

8. 数据结构和接口实现

这样的设计逻辑是在最近的开发应用上不断练就的技能,作为开发设计不应该只coding,而不管设计。

好的code应该从结构一眼看到50%,才到接口实现。

例如存放一个学生的信息:

1. 先定义一个结构体

struct student
{
    char name[32];
    int age;
    struct student *next;
};

 s1->s2->s3.....

2 定义接口

插入数据和删除数据接口。