本次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 定义接口
插入数据和删除数据接口。