一、实验目标
(一)领悟应用程序如何调用系统调用
在平时状态下,调用系统调用和调用二个平淡无奇的自定义函数在代码上并从未什么样界别,但调用后产生的职业有一点都不小分歧。调用自定义函数是经过call指令直接跳转到该函数的地点,继续运营。而调用系统调用,是调用系统库中为该种类调用编写的两个接口函数,叫API(Application
Programming
Interface)(它对应二个宏_syscallx,在unistd.h中)。API并无法成功系统调用的真正成效,它要做的是去调用真正的类别调用,进度是:
- 把系统调用的数码存入EAX
- 把函数参数存入别的通用寄放器
- 触发0x80号中断(int 0x80)
- 接下去便是水源的暂停管理了,自动调用函数system_call(在kernel/system_call.s中),到sys_call_table找到系统调用号对用的系统调用sys_xxx,执行它。
-
翻阅文本lib/close.c、fs/open.c、kernel/system_call.s、include/unistd.h、include/linux/sys.h,寻觅种类调用close与那几个文件之间的涉及,清晰close系统调用的历程;
-
参照他事他说加以考察连串调用close,在地点一名目好多文件中丰裕或修改系统调用iam和whoami相关的剧情(系统调用号、系统调用表、系统调用总的数量等);
-
创办who.c文件,在里头分别编写制定包蕴具体完成细节的sys_iam()和sys_whoami()函数;
-
修改Makefile,以便在进行make命令时能够编写翻译who.c文件;
-
编译linux内核,运行bochs;
-
编排测量试验程序iam.c和whoiam.c;
本次实验须求修改unistd.h sys.h system_call.s makefile,并编写who.c
iam.c whoami.c
历史观的神经网络并无法管理类似连串的数额难点,那也是它的贰个很大的短板。比方,想象你要去看清电影中每三个点发生哪些的事件。守旧神经网络是无法将原先的年月利用到当下事变的预测的。
前言
此次试验和某操作系统实验课好像啊,笔者又回顾起了那三次被Linux支配着的畏惧。
此番试验应用Ubuntu 14.04 LTS 64 bits进行交叉编写翻译,下位机是Raspberry Pi
2,编写翻译的内核版本是3.18.16-v7,而下载链接中提供的Raspbian-Wheezy-二零一五-02-17的根本也是3.18。编写翻译基本遵从松木丛派官方文书档案进行。
笔者此次试验的一体化思路是先在SD
card上烧录好打包好的类别镜像,而随后编写翻译的基础能够直接放进去而不用重城建总公司体根目录。固然镜像内核版本和编写翻译内核版本差距过大的话轻松出标题。而自身选用的这几个3.18本子和自己原来操作系统实验所用的版本也比较周围,所以基本步骤能够通用。
借使根据教程跑,並且采取交叉编写翻译的话,那么推荐编写翻译安装的时候选拔三个可见一贯触及到木莓派PCIe闪存卡的微处理器,各个远程服务器以及虚拟机在编写翻译内核模块的时候借使出了本身文中的不行标题恐怕会相比难受。或然说其实是本人方法有标题?(Update:
近期想了想,认为温馨好蠢啊,能够陆陆续续编写翻译好了再scp过去,(:з」∠))
聊起底一节是自己折腾Acadia的从入门到放弃之路,希望能对大家不怎么推来推去。(翁老大说Acadia直接放弃好了,不需要入门)
系统调用:客户在编制程序时能够调用的操作系统功效
1、熟稔操作系统的连串机能调用。
(1)修改linux-0.11/include/linux/sys.h
据书上说Linux调用系统调用的进度,供给把
iam()与whoami()三个函数加到全局变量,和制动踏板函数表中就足以了,中断被调用的时候,先物色中断向量表,找到相应的函数名,调用其函数。
各自加多评释到最下边和数组中
extern int sys_setup();
extern int sys_exit();
extern int sys_fork();
extern int sys_read();
extern int sys_write();
extern int sys_open();
extern int sys_close();
extern int sys_waitpid();
extern int sys_creat();
extern int sys_link();
extern int sys_unlink();
extern int sys_execve();
extern int sys_chdir();
extern int sys_time();
extern int sys_mknod();
extern int sys_chmod();
extern int sys_chown();
extern int sys_break();
extern int sys_stat();
extern int sys_lseek();
extern int sys_getpid();
extern int sys_mount();
extern int sys_umount();
extern int sys_setuid();
extern int sys_getuid();
extern int sys_stime();
extern int sys_ptrace();
extern int sys_alarm();
extern int sys_fstat();
extern int sys_pause();
extern int sys_utime();
extern int sys_stty();
extern int sys_gtty();
extern int sys_access();
extern int sys_nice();
extern int sys_ftime();
extern int sys_sync();
extern int sys_kill();
extern int sys_rename();
extern int sys_mkdir();
extern int sys_rmdir();
extern int sys_dup();
extern int sys_pipe();
extern int sys_times();
extern int sys_prof();
extern int sys_brk();
extern int sys_setgid();
extern int sys_getgid();
extern int sys_signal();
extern int sys_geteuid();
extern int sys_getegid();
extern int sys_acct();
extern int sys_phys();
extern int sys_lock();
extern int sys_ioctl();
extern int sys_fcntl();
extern int sys_mpx();
extern int sys_setpgid();
extern int sys_ulimit();
extern int sys_uname();
extern int sys_umask();
extern int sys_chroot();
extern int sys_ustat();
extern int sys_dup2();
extern int sys_getppid();
extern int sys_getpgrp();
extern int sys_setsid();
extern int sys_sigaction();
extern int sys_sgetmask();
extern int sys_ssetmask();
extern int sys_setreuid();
extern int sys_setregid();
extern int sys_iam();//需要新增的地方
extern int sys_whoami();
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
sys_setreuid,sys_setregid, sys_iam, sys_whoami };//记得在中断向量表的最后填上系统调用
而是HavalNN化解了这一个主题材料,OdysseyNN中有个XC90NN Cell用来悠久化音讯。<a
href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=”
”
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
试编译
其实假使理解的话,直接在文件目录底下改文件就可以,本步骤不是必得的。
可是,获得不会的事物不足先点个灯?
先是从git上把品种拽下来,解压之后文件夹结构轮廓上长这么。
推荐全体的操作均在linux下完结。因为假如缩减包内有部分软链接什么的在windows底下会出标题,而在linux下才会被科学深入分析。
而一旦在mac上架子不对也是会出题目标,例如说使用的文件系统是高低写不灵活的,那那会促成到背后编写翻译的时候缺乏某个文件只怕干枯有个别宏定义等等。文件系统大小写标题标应用方案戳那位同学的在mac
os x上拓宽嵌入式linux开辟[编译linux
kernel]
文本夹结构
然后是安装交叉编译工具,在Lab第22中学已经下载过,直接拿来利用就能够。
编写翻译器们
还应该有还应该有,编写翻译之前有部分借助,别忘记装了,ubuntu照旧足以apt-get大法拿下来的。
sudo apt-get install bc
松木丛派1和2里边的操作照旧有局地分别的,注意看好型号,山抛子派1平昔去找官方文书档案顺着做就好了。
筹划好今后,就能够起来编写翻译了。
首先是config文件,能够运用未来四月泡派上采纳的config文件进行编写翻译,木莓派上的布置文件是/proc/config.gz,使用zcat命令能够直接查看。
而遵守法定教程,源码包内有连带配置能够一贯拿来接纳。
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
动用上述命令选取好项目布局就可以。小编选取接纳的是源码包内和自身红树莓派对应的极度配置(官方的科目写的正是以此)。
configuration
以后企图好以往就可以直接开头编写翻译了
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
童女祈祷中………………
左右又是一段持久的编写翻译之旅。
只要编写翻译中间有难点,一般的话先思考是否借助未有满意,而后如若再有怎样file
missing之类的失实笔者帮衬于是源码包失常。
完整编写翻译过程蛮顺遂的。不像某Acadia……一定是因为悬钩子派长得更像自家精通的Linux……
编写翻译完结后文件结构
编写翻译实现现在正是设置,即使烧录了欧洲红树莓派官方给出的SDcard镜像,那么以后你的CF存款和储蓄卡分乡长这么。SDcard使用读卡器接入计算机。
/dev/sdd
/dev/sdd1 fat32 boot 启动分区
/dev/sdd2 ext4 / 根目录
由于目录与学科一致,所以就径直依据步骤实施叁次就能够。
# 建立挂载点
mkdir /mnt/fat32
mkdir /mnt/ext4
# 挂载
# fat32挂载boot
sudo mount -t vfat /dev/sdd1 /mnt/fat32
# ext4挂载根文件夹
sudo mount -t ext4 /dev/sdd2 /mnt/ext4
# 在文件系统中安装编译出来的模块
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/mnt/ext4 modules_install
# 备份原来的系统镜像,其中$KERNEL在编译前进行过设置,此时值为kernel7
sudo cp /mnt/fat32/$KERNEL.img /mnt/fat32/$KERNEL-backup.img
sudo scripts/mkknlimg arch/arm/boot/zImage /mnt/fat32/$KERNEL.img
# 将其他我不认识的文件拷到我不认识的地方
sudo cp arch/arm/boot/dts/*.dtb /mnt/fat32/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
sudo cp arch/arm/boot/dts/overlays/README /mnt/fat32/overlays/
# 卸载
sudo umount /mnt/fat32
sudo umount /mnt/ext4
那个时候一贯将SDcard插到三月泡派上,上电就足以运行了。
系统调用是操作系统提需要编制程序人士的独一接口,使CPU状态从顾客态陷入内核态
2、精晓用C语言完成系统成效调用的章程和步子。
(2) 修改系统调用数:
system_call.s 在 linux-0.11/kernel 中
需要把nr_system_calls 由72改为 74 表示了暂停函数的个数。
sa_handler = 0
sa_mask = 4
sa_flags = 8
sa_restorer = 12
nr_system_calls = 74
(3)新增添系统调用 号:
unistd.h 不能够直接在oslab直接直接改造,
而须要在虚构机中期维修改,
在oslab中有一个mount-hdc脚本
运作sudo ./mount-hdc 能够把设想机硬盘挂载在oslab/hdc 目录下。
(那些也足以达成文件分享)
在hdc/usr/include 目录下修改unistd.h
卡在这两日的经过.
#define __NR_setup 0 /* used only by init, to get system going */
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_waitpid 7
#define __NR_creat 8
#define __NR_link 9
#define __NR_unlink 10
#define __NR_execve 11
#define __NR_chdir 12
#define __NR_time 13
#define __NR_mknod 14
#define __NR_chmod 15
#define __NR_chown 16
#define __NR_break 17
#define __NR_stat 18
#define __NR_lseek 19
#define __NR_getpid 20
#define __NR_mount 21
#define __NR_umount 22
#define __NR_setuid 23
#define __NR_getuid 24
#define __NR_stime 25
#define __NR_ptrace 26
#define __NR_alarm 27
#define __NR_fstat 28
#define __NR_pause 29
#define __NR_utime 30
#define __NR_stty 31
#define __NR_gtty 32
#define __NR_access 33
#define __NR_nice 34
#define __NR_ftime 35
#define __NR_sync 36
#define __NR_kill 37
#define __NR_rename 38
#define __NR_mkdir 39
#define __NR_rmdir 40
#define __NR_dup 41
#define __NR_pipe 42
#define __NR_times 43
#define __NR_prof 44
#define __NR_brk 45
#define __NR_setgid 46
#define __NR_getgid 47
#define __NR_signal 48
#define __NR_geteuid 49
#define __NR_getegid 50
#define __NR_acct 51
#define __NR_phys 52
#define __NR_lock 53
#define __NR_ioctl 54
#define __NR_fcntl 55
#define __NR_mpx 56
#define __NR_setpgid 57
#define __NR_ulimit 58
#define __NR_uname 59
#define __NR_umask 60
#define __NR_chroot 61
#define __NR_ustat 62
#define __NR_dup2 63
#define __NR_getppid 64
#define __NR_getpgrp 65
#define __NR_setsid 66
#define __NR_sigaction 67
#define __NR_sgetmask 68
#define __NR_ssetmask 69
#define __NR_setreuid 70
#define __NR_setregid 71 /*Linux system_call total 72*/
#define __NR_iam 72 /*new system_call 72 and 73*/
#define __NR_whoami 73
修改系统调用
本节得以构成操作系统实验2的试验教导一齐食用。
系统调用实际上是调用内核某些函数的经过。所以,为了告诉操作系统何时该用什么函数,供给在根本中举行局地修改。
率先,你必要在基本中有三个如此的可进行的函数。在arch/arm/kernel中新建三个sys_mysyscall.c文件,只饱含四个函数,其效果为在运维后输出一条基本日志。
sys_mysyscall.c
而后,修改Makefile中的obj-y字段,将sys_mysyscall.o参预指标文件中。将在该函数放入系统的编写翻译进度。
Makefile
而后,你须要让操作系统知道那么些函数是拍卖有些系统调用的函数。此时,必要修改系统的脚刹踏板向量表。此时急需修改arch/arm/kernel/calls.S文件。
遵照操作系统实验的科目,选取223号调用实行轮换。223号调用在x86体系框架结构的系统上是向来不选取的,而arm的就像是如此替换也从未难题?不是很懂,也才那样替换未有蒙受坑。
系统中断向量表 call.S
在include/uapi/asm-generic/unistd.h头文件上将223号调用与有些宏进行关联,在syscall()中注册二个职位,方便调用。
unistd.h
然后接下去就是又二遍的编写翻译了,但是此次由于改的事物非常少,编写翻译会快一些。
将镜像载入到SDcard之后,开始编写制定使用系统调用的次序。如下五个分别使用了汇编的艺术以及系统提供的syscall方式调用系统调用。
#include <stdio.h>
#define sys_call() {__asm__ __volatile__ ("swi 0x900000+223\n\t");} while(0)
int main(void) {
sys_call();
printf("Type \"dmesg | tail\" to see the result.\n");
return 0;
}
#include <linux/unistd.h>
#include <sys/syscall.h>
int main(){
syscall(223);
return 0;
}
运维结果
种种操作系统都提供几百种系统调用(进度序调控制,进度通讯,文件使用,目录操作,设备管理,音信保养等)
3、驾驭使用10H号功效调用(BIOS的呈现I/O成效调用)来兑现对显示器的操作与垄断。
(4)新扩充who.c文件,达成系统调用的函数:
将成功的who.c文件放入linux-0.01/kernel 目录下
#include <string.h>
#include <errno.h>
#include <asm/segment.h>
char msg[24];
int sys_iam(const char * name)
{
char tep[26];
int i = 0;
for(; i < 26; i++)
{
tep[i] = get_fs_byte(name+i);
if(tep[i] == '\0') break;
}
if (i > 23) return -(EINVAL);
strcpy(msg, tep);
return i;
}
int sys_whoami(char * name, unsigned int size)
{
int len = 0;
for (;msg[len] != '\0'; len++);
if (len > size)
{
return -(EINVAL);
}
int i = 0;
for(i = 0; i < size; i++)
{
put_fs_byte(msg[i], name+i);
if(msg[i] == '\0') break;
}
return i;
}
内核模块
率先要求写三个内核模块,作者就偷懒间接使用即时操作系统实验中写的类别经过总括的次第了。
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/string.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/uaccess.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lmzqwer2 <lmzqwerty@163.com>");
MODULE_DESCRIPTION("In-kernel processors infomation detector.");
#define show(id,arr,x) printk(KERN_INFO "%s%s %d\n", id, #x, arr[x]);
#define clean(arr,x) arr[x] = 0
#ifndef IDENTIFIER
#define IDENTIFIER aaaadfa
#endif
static int processorDetector_read(struct file *file, char __user *out,
size_t size, loff_t *off){
// identifier用于每次调用的输出,每行的输出均带有此标识符,而后用户程序在读取系统日志的时候只识别带有该标识符的日志。
static char identifier[] = "IDENTIFIER";
// 系统init进程指针,使用该指针可以将整个系统的所有进程遍历一遍
struct task_struct *task = &init_task;
int i, taskTotal = 0;
// 用于统计每个状态的进程的个数,开大数组为了能少写点代码……写法比较蠢
static int stateCollection[2049];
// 每次进调用需要清除上一次的结果
clean(stateCollection, TASK_RUNNING);
clean(stateCollection, TASK_INTERRUPTIBLE);
clean(stateCollection, TASK_UNINTERRUPTIBLE);
clean(stateCollection, __TASK_STOPPED);
clean(stateCollection, __TASK_TRACED);
clean(stateCollection, EXIT_DEAD);
clean(stateCollection, EXIT_ZOMBIE);
clean(stateCollection, EXIT_TRACE);
clean(stateCollection, TASK_DEAD);
clean(stateCollection, TASK_WAKEKILL);
clean(stateCollection, TASK_WAKING);
clean(stateCollection, TASK_PARKED);
clean(stateCollection, TASK_STATE_MAX);
// 修改identifier,使每次读取该设备的时候返回的值均不同。
identifier[0]++;
i = 0;
while (identifier[i] == 'z'+1){
identifier[i++] = 'a';
if (i < sizeof(identifier)){
identifier[i]++;
}else
break;
}
// 遍历系统的进程,有宏next_task进行进程之间的跳转
// linux的进程使用环形链表,从init_task到init_task即完成了一次遍历
do{
printk(KERN_INFO "%s%s %d %ld %s\n", identifier, task->comm, task->pid, task->state, task->parent->comm);
stateCollection[task->state]++;
taskTotal++;
task = next_task(task);
}while (task != &init_task);
// 输出遍历之后的统计信息
printk(KERN_INFO "%sThere is %d processes in system.", identifier, taskTotal);
show(identifier, stateCollection, TASK_RUNNING);
show(identifier, stateCollection, TASK_INTERRUPTIBLE);
show(identifier, stateCollection, TASK_UNINTERRUPTIBLE);
show(identifier, stateCollection, __TASK_STOPPED);
show(identifier, stateCollection, __TASK_TRACED);
show(identifier, stateCollection, EXIT_DEAD);
show(identifier, stateCollection, EXIT_ZOMBIE);
show(identifier, stateCollection, EXIT_TRACE);
show(identifier, stateCollection, TASK_DEAD);
show(identifier, stateCollection, TASK_WAKEKILL);
show(identifier, stateCollection, TASK_WAKING);
show(identifier, stateCollection, TASK_PARKED);
show(identifier, stateCollection, TASK_STATE_MAX);
// 将标识符拷贝给用户
copy_to_user(out, identifier, sizeof(identifier));
return 0;
}
// 只实现了读取指令,返回identifier
static struct file_operations processorDetector_fops = {
.owner = THIS_MODULE,
.read = processorDetector_read,
.llseek = noop_llseek
};
// 模块名为processorDetector
static struct miscdevice processorDetector_misc_device = {
.minor = MISC_DYNAMIC_MINOR,
.name = "processorDetector",
.fops = &processorDetector_fops
};
// insmod的时候调用该函数进行一些处理
static int __init processorDetector_init(void){
// create a device file at "/dev/"
// named "processorDetector"
misc_register(&processorDetector_misc_device);
printk(KERN_INFO
"processorDetector device has been registed.\n");
return 0;
}
// rmmod的时候调用该函数进行一些清理
static void __exit processorDetector_exit(void){
misc_deregister(&processorDetector_misc_device);
printk(KERN_INFO
"processorDetector device has been unregisted.\n");
}
// 注册模块的init & exit函数
module_init(processorDetector_init);
module_exit(processorDetector_exit);
该内核模块还索要一个使用者进行应用。
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#include <fcntl.h>
char identifier[100];
char buf[100000];
int inner(char* a, char* b){
while (*a++ == *b++);
return *a==0;
}
int main(int argc, char* argv[]){
// 这个fd打开的是上面编译的内核模块
int fd = open("/dev/processorDetector", O_RDWR);
// 这个FILE*打开的是系统log
FILE* log = fopen("/var/log/kern.log", "r");
int i, len, buflen;
// 首先从内核模块中获取输出标识符
read(fd, identifier, sizeof(identifier));
printf("Identifier: %s\n", identifier);
// 为了方便以后性能优化,先睡个2s先
sleep(2);
// 读取系统日志,判断标识符后输出
len = strlen(identifier);
while (!feof(log)){
fgets(buf, sizeof(buf), log);
buflen = strlen(buf);
i = 0;
// 不要吐槽暴力枚举
while (i + len < buflen && !inner(identifier, buf+i)){
i++;
}
if (!feof(log) && i + len < buflen - 1){
printf("%s", buf+i+len);
}
}
return 0;
}
好了,今后有了内核模块,也会有了对应的的客户程序。那么正是编写翻译运行了。
自个儿所想的内核模块编写翻译进度是这么的,一切顺遂。
操作系统实验中的内核模块编写翻译
下一场就崩了。一定是代码又过保质期了……
既然崩了就化解喽。
错误信息提醒的是找不到build文件夹,原来还感到是设置的时候从不带上,然后开采正是安装的时候未有带上。不过那错误和本人预想的分化……
编写翻译错误
自家就一脸懵逼得望着那一个荒唐。这么些 build -> /home/lmuser/tmp/linux
的野趣是它在设置的时候只是送了二个软链接过去?竟然从未一贯拷贝……
只是细心一想大概是SDcard上一贯比不上此大的空中把一切项目拷贝进去,所以就选拔了软链接。
然而,不过,可是!今后SDcard在龙船泡派上,并从未/home/lmuser/这种事物。经过自己一番不假思量,作者说了算——内核模块也用交叉编写翻译。
既是要交叉编写翻译,那么makefile自然就不可能像原本的那样轻巧了。手动加的特殊手艺有一些多。首假设点名编写翻译文件夹以及钦点编写翻译的参数等。
obj-m := processorDetector.o
# 其实不需要这么多特技,直接定位/home/lmuser/tmp/linux即可
KERNEL_VER := 3.18.16-v7
KERNEL_DIR := /media/lmuser/f24a4949-f4b2-4cad-a780-a138695079ec/lib/modules/$(KERNEL_VER)/build
PWD := $(shell pwd)
ARGS := ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
all:
make -C $(KERNEL_DIR) SUBDIRS=$(PWD) $(ARGS) modules
clean:
rm *.o *.ko *.mod.c
.PHONY:clean
倍感好蠢啊……一点都欠美观。但是依旧好用的……
然后将沙窝窝派关机,拔出SDcard,读卡器,cd,make,弹出SDcard,木莓派开机。
编写翻译期报了个warning,华丽丽无视之。
接下去正是认证成果的时候了,果决运维之。
内核模块运维结果
中标把方方面面操作系统当前运维的富有进度都输出出来了。
撒花,庆祝!
应用程序->系统调用;应用程序->C函数库/API接口->系统调用;
二、实验内容
(5) 修改Makefile 文件
让我们增添的kernel/who.c能够和别的Linux代码编写翻译链接到一同,必得求修改Makefile文件
Makefile在代码树中有广大,分别担负差别模块的编写翻译职业。我们要修改的是kernel/Makefile。
OBJS = sched.o system_call.o traps.o asm.o fork.o \
panic.o printk.o vsprintf.o sys.o exit.o \
signal.o mktime.o
改为:
OBJS = sched.o system_call.o traps.o asm.o fork.o \
panic.o printk.o vsprintf.o sys.o exit.o \
signal.o mktime.o who.o
另一处:
### Dependencies:
exit.s exit.o: exit.c ../include/errno.h ../include/signal.h \
../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \
../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \
../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \
../include/asm/segment.h
改为:
### Dependencies:
who.s who.o: who.c ../include/linux/kernel.h ../include/unistd.h
exit.s exit.o: exit.c ../include/errno.h ../include/signal.h \
../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \
../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \
../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \
../include/asm/segment.h
Makefile修改后,和现在同样“make all”就能够自行把who.c参加到根本中了
make all
编译系统
(6) 新添iam.c 跟whoami.c文件以测量试验是或不是丰盛系统调用成功:
iam.c
#define __LIBRARY__
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
_syscall1(int,iam,const char*,name)
int main(int argc,char* argv[])
{
iam(argv[1]);
return 0;
}
whoami.c
#define __LIBRARY__
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
_syscall2(int, whoami, char*, name, unsigned int, size);
int main(int argc, char ** argv)
{
char t[30];
whoami(t, 30);
printf("%s\n", t);
return 0;
}
注:那七个C文件是必要在 你改改过的linux 0.11本子上编写翻译的,假使嫌在 0.11
内部用vi 写代码太烦,能够在虚构机中写好, 在oslab中运作
sudo ./mount-hdc
可以把虚构机硬盘挂载在oslab/hdc 目录下。
接下来再将文件复制到 oslab/hdc/user/root/下
/user/root/ 正是您的linux 0.11 开机后所在目录
好了, 写完了,运行run
cd /home/fgx/oslab
./run
运行种类
(7)编译 iam.c 跟 whoami.c
gcc -o iam iam.c
gcc -o whoami whoami.c
运作一波,欣喜来啦~
image.png
关于Acadia
最后自个儿使用欧洲糙莓派并不是Acadia实现了试验,原因重如若因为三月泡派在互连网的学小飞侠比较多,并且复盆子派看上去整个文件结构怎么样的就相比较像本人熟知的Linux。(主要是因为我和Acadia相性不合,折腾不出来)
还要尚未托盘派未有板载的存款和储蓄设备,SDcard直接当做系统存款和储蓄,插拔读取修改操作都很有益。最要紧的是无须操心刷机刷坏了,刷坏了再烧多少个就是了,Acadia有板载的寄存不是很敢乱玩。
以下的实践步骤作者编写翻译成功跻身过叁遍系统,独有二回。之后不管怎么操作都进不去,大概是那一步中间有啥分外的地方笔者没细心到吧。
尝试一最早就比不上愿。纵然pcDuino/kernel.git那几个git饭馆非常的小,然而linux-sunxi这么些库房大啊,1.6G哟,500W+的文书啊。
每回git到1W+的时候就clone不下去了。后来设计方案是使用服务器git clone
–recursive下载完全之后,tar -czvf三回性打个包,再wget /
Thunder到地点,再丢给设想机linux中就能够举行编写翻译了。
拿下来以往便是始于编写翻译了,依据合法教程,一步一步跑下来。如同也远非叫作者安顿怎么着config之类的。_(:з」∠)_
然后编写翻译报了个错。
arm-linux-gnueabihf-ld.bfd: error: required section '.rel.plt' not found in the linker script
网络找了某些素材,说是要下载这一个包。
sudo apt-get install ia32-libs
唯独笔者并未能成功找到那几个包,寻找了半天,最后结出是使用上边那么些包进行调换。
sudo apt-get install gcc-multilib
编写翻译继续。
fs/btrfs/ctree.c:26:21: fatal error: locking.h: No such file or directory
#include "locking.h"
那些fs找不到底文件啊,拿很难办啊,反正不认得,config里面去掉好了。编写翻译继续。
而后,又报了个错。
fel.c:21:20: fatal error: libusb.h: No such file or directory
#include <libusb.h>
英特网找说是缺这几个,
sudo apt-get install libusb-1.0-0-dev
不过仍旧找不到,最后发掘少了二个配备项指标前后相继。
sudo apt-get install pkg-config
下下来现在就足以持续编译了。
下一场就又编写翻译不下来了。
Make sys configs: /home/linux/kernel/allwinner-tools/livesuit/default/sys_config_linux.fex
/home/linux/kernel/allwinner-tools/bins/script: 1: /home/linux/kernel/allwinner-tools/bins/script: Syntax error: end of file unexpected
先用file看了须臾间这么些文件,并看不出什么。
linux@linux-VBox:~/kernel/allwinner-tools/bins$ file script
script: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=7ce8c666545525b7459addd15d8d7b91c4e70009, not stripped
百度了一晃意识这样一句话
[【转】有关pcduino
内核编写翻译难点]()
诶,然后发掘确实是生成了hwpack这几个文件,笔者就当是编译成功没再管了。(说不定就是这个问题)
接下去即是怎么着将其安装到Acadia了。
首先解包,有如下文件结构。
文件结构
Acadia有一个板载的体系以及俩SDcard插槽,通过配备能够从中放肆选三个拓宽运行。
Acadia Boot开关选用
自个儿先是采纳使用SD1进行运行。运维的艺术也很寒酸,使用的是法定给的镜像,然后如同是没运维起来依然怎么回事,反正最后作者割舍了从SDcard直接开发银行。
而假设要从板子运转,由于有板子自带存款和储蓄器,不能备份,作者选用怂。
要把刚刚不行hwpack中的文件全部归入系统,那么须要惦记部分东西。首先,板载系统自带bootloader,那么bootloader这几个文件夹应该是不用去管的。而rootfs是放系统模块的,留心看了弹指间,和原版系统并未有争持,直接拷贝之。而kernel相比较为难,想要无冲突解决的话得加一些特殊技艺。
比方使用bootloader的的片段限令,将根本手动载入系统。
先是依然得把系统烧入SDcard,使用以下命令就可以,注意seek是再三再四载入系统的时候的参数之一,要前后一致。
sudo dd if=uImage of=/dev/sdd bs=512 seek=2048
sync
sync了后来,把SDcard从计算机上转到Acadia上,从emmc运维,步向bootloader。
# 设置了一些控制台的参数
setenv bootargs_base 'setenv bootargs console=ttymxc0,115200'
# 控制文件系统的位置,使用的root位置为emmc即可
setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait rw'
# 载入系统内核,
# 表示读取SDcard1的
# 地址为0x800后续0x2000的内容
# 读入位置为$(loadaddr),即后续bootm所用的地址
setenv bootcmd_mmc 'run bootargs_base bootargs_mmc; mmc dev 1; mmc read ${loadaddr} 0x800 0x2000; bootm'
# 开始引导
setenv bootcmd 'run bootcmd_mmc'
boot
然后,接下去出现了二种错误。
-
先是种是有史以来读不到
正如少见,重启可破。
-
其次种是CRC校验败北
能够应用命令强行扭过去。
setenv verify no
不过这种方法基本上是会进第三种错误的。校验本来就是为了能够保证东西是对的。
未解决!
* 第三种是输出了 Starting kernel ... 之后,完全没有反应
这句话是bootloader输出的最后一句话,在此之后,控制权转交给内核。
然而内核一点反应都没有,那这就很尴尬了。原因有很多,没有再折腾了。
未解决。
最终我的Acadia之路在某次顺利从编译出的内核启动之后,就停留在了那个尴尬的阶段。
Starting kernel …
总的来说,没做出来可能的原因有几点;
1. make没有make完毕
2. make前没有做相关的配置
3. 没有直接烧录板子,太怂
4. 虚拟机有毒
5. 和Acadia相性不合
6. 我太蠢
反正就是扑街了,哪来这么多原因……
#参考资料
* [git clone 一个比较大的 repo 出错, 纠结我 1 天了, 求助](https://segmentfault.com/q/1010000000637171)
树莓派相关
* [Raspberry Pi documentation: KERNEL BUILDING](https://www.raspberrypi.org/documentation/linux/kernel/building.md)
* [驱动开发的一些错误解决方法](http://blog.chinaunix.net/uid-24456535-id-2606924.html)
* [树莓派开发系列教程8——树莓派内核编译与固件升级](http://blog.csdn.net/xdw1985829/article/details/39077611)
* [树莓派上为内核添加系统调用](http://blog.csdn.net/rk2900/article/details/8848093)
* [在mac os x上进行嵌入式linux开发[编译linux kernel]](http://es.hzypp.me/zai-mac-os-xshang-jin-xing-qian-ru-shi-linuxkai-fa-bian-yi-linux-kernel/)
Acadia相关
* [Cross build pcDuino kernel on X86-64 machine](http://learn.linksprite.com/pcduino/a10-based-pcduino1pcduino2pcduino-litepcduino-lite-wifi/how-to-cross-build-pcduino-kernel-on-x86-64-machine/)
* [Tutorial on Flashing LinkSprite Acadia](http://learn.linksprite.com/acadia/tutorial-on-flashing-linksprite-acadia/)
* [pcDuino的Linux移植心得笔记](http://www.linuxidc.com/Linux/2013-04/83606.htm)
* [pcDuino: How to compile Kernel for pcDuino](http://blog.chinaunix.net/uid-23381466-id-3821540.html)
* [How to build linux images by yourself for pcDuino?](http://learn.linksprite.com/?p=1048)
* [pcDuino无显示器刷机与使用](http://www.cnblogs.com/damir/p/3200558.html)
* [【转】有关pcduino 内核编译问题](http://www.pcduino.org/forum.php?mod=viewthread&tid=147)
* [I.MX6Q(TQIMX6Q/TQE9)学习笔记——内核启动与文件系统挂载](http://blog.csdn.net/girlkoo/article/details/44626011)
* [Get stuck at "Starting kernel ..." using imx-3.10.17-1.0.1_ga](https://community.nxp.com/thread/329129)
# 下载链接
树莓派相关
* [raspberrypi / linux](https://github.com/raspberrypi/linux)
整个项目大概git clone下来至少有1G。用校内的小水管慢慢跑简直难受。
我选择的版本是rpi-3.18.y。如果有服务器直接git clone了之后git checkout到这个tag了之后,.git文件夹的历史使命就结束了。
此时将.git文件夹直接删了就可以了。大概整个目录就剩下100多Mb了,这就能下载了。
当然,如果有别人下载好了你直接拷贝也是极好的。
官方文档提供了这样一个命令,也是能减少git文件夹的。
git clone –depth=1
https://github.com/raspberrypi/linux
* [raspbian-2015-02-17/](https://downloads.raspberrypi.org/raspbianraspbian-2015-02-17/)
Acadia相关
* [Github: pcduino / kernel](https://github.com/pcduino/kernel)
* [Image for Acadia](http://www.linksprite.com/image-for-acadia/)
内核函数处理种类调用
1、在荧屏的内定区域内展现字符串。(必做题)
系统调用机制的统一希图
1.制动踏板/非凡机制帮衬系统调用服务的兑现;2.取舍一条特别指令:陷入指令(访管指令),引发这一个,完结顾客态到内核态的切换;3.系统调用号和参数:每一个系统调用都事先给定贰个号码(功效号)4.
类别调用表:寄放系统调用服务例程的进口地址
2、在显示器的创建区域内画框,在框内显示字符串。(提升题)
参数字传送递进程难题
怎么着完成客户程序的参数字传送递给基础?
3种常用达成形式
1.由陷入指令自带参数:陷入指令的尺寸有限,且还要引导系统调用作用号,只好自带有限的参数;2.
因此通用存放器传递参数,这个寄放器是操作系统和顾客程序都能访谈的,但寄放器的个数会限制传递参数的多少
- 在内部存储器中开发专项使用饭店区来传递参数。
3、在荧屏上内定区域内画框并以动画情势体现字符串。(选做题)
系统调用实行进程
当CPU实行到相当的陷落指令时:
暂停/卓殊机制:硬件维护现场;通过查中断向量表把调整权转给系统调用总入口程序
系统调用总入口程序:保存现场;将参数保存在根本货仓里;通过查系统调用表把调控权转给相应的系统调用管理例程或内核函数
推行系统调用例程
过来现场,再次回到客商程序
清屏子程序:
void cls(void)
{ union REGS r;
r.h.ah=6; /*子功用号*/
r.h.al=0;
r.h.ch=0; /*左上角坐标*/
r.h.cl=0;
r.h.dh=24; /*右下角坐标*/
r.h.dl=79;
r.h.bh=7; /*7代表钴黄*/
int86(0x10,&r,&r); /*系统机能调用*/
}
定位子程序:
void locate(int x, int y)
{ union REGS r;
r.h.ah=2; /*子成效号*/
r.h.dh=x; /*定位点坐标*/
r.h.dl=y;
r.h.bh=0;
int86(0x10,&r,&r);
}
在钦定地点写参数:
void writech(int x , int y, char ch ,int attr)
{ union REGS r;
locate(x ,y);
r.h.ah=9;
r.h.bh=0;
r.h.al=ch;
r.h.bl=attr
r.x.cx=1;
int86(0x10,&r,&r);
}
显示器画框能够用制表符来画。其主要措施是无休止调用writech函数,在钦命区域左近突显制表符,进而勾勒出二个窗口的大致。
制表符 ASCII码
┛ 217
┏ 218
┓ 191
┗ 192
┃ 179
━ 196