系统调用,Linux系统调用

一、实验目标

(一)领会应用程序怎么着调用系统调用

在日常景况下,调用系统调用和调用多少个惯常的自定义函数在代码上并不曾什么分别,但调用后发生的事务有比十分大分歧。调用自定义函数是透过call指令直接跳转到该函数的地方,继续运营。而调用系统调用,是调用系统库中为该系统调用编写的贰个接口函数,叫API(Application
Programming
Interface)(它对应一个宏_syscallx,在unistd.h中)。API并不可能成就系统调用的的确功能,它要做的是去调用真正的系统调用,进程是:

  • 把系统调用的编号存入EAX
  • 把函数参数存入其余通用存放器
  • 触发0x80号中断(int 0x80)
  • 接下去就是基本的行车制动器踏板管理了,自动调用函数system_call(在kernel/system_call.s中),到sys_call_table找到系统调用号对用的体系调用sys_xxx,执行它。
  1. 读书文本lib/close.c、fs/open.c、kernel/system_call.s、include/unistd.h、include/linux/sys.h,寻觅系统调用close与那些文件之间的关联,清晰close系统调用的进度;

  2. 仿照效法类别调用close,在上头一多级文件中加上或涂改系统调用iam和whoami相关的内容(系统调用号、系统调用表、系统调用总的数量等);

  3. 始建who.c文件,在内部独家编写制定包蕴具体落到实处细节的sys_iam()和sys_whoami()函数;

  4. 修改Makefile,以便在施行make命令时能够编写翻译who.c文件;

  5. 编译linux内核,运行bochs;

  6. 编写测量检验程序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本子和自家原先操作系统实验所用的版本也比较临近,所以基本步骤能够通用。

一经遵照教程跑,何况接纳交叉编译的话,那么推荐编写翻译安装的时候采取二个可见直接接触到复盆子派CF存款和储蓄卡的微型Computer,各样远程服务器以及设想机在编写翻译内核模块的时候如果出了本身文中的极其标题可能会相比较忧伤。可能说其实是自己方法有标题?(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 };//记得在中断向量表的最后填上系统调用

唯独翼虎NN解决了这几个标题,PRADONN中有个奥迪Q7NN 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”>
系统调用,Linux系统调用。<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=”

class=”uri”>

<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=”88亚洲城,”
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<a href=””
class=”uri”>
<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]

88亚洲城 1

文件夹结构

然后是设置交叉编写翻译工具,在Lab第22中学早已下载过,直接拿来行使就可以。

88亚洲城 2

编写翻译器们

还应该有还会有,编写翻译此前有点依靠,别忘记装了,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

利用上述命令采用好项目布局就可以。作者选用使用的是源码包内和笔者地仙泡派对应的不得了配置(官方的课程写的正是那些)。

88亚洲城 3

configuration

随后筹算好之后就足以平昔初阶编写翻译了

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

童女祈祷中………………

反正又是一段持久的编写翻译之旅。

借使编译中间有标题,一般的话先思索是还是不是凭仗未有满意,而后借使再有啥样file
missing之类的错误笔者赞成于是源码包不符合规律。

一体化编写翻译进度蛮顺利的。不像某Acadia……一定是因为绒毛悬钩子派长得更像自家熟稔的Linux……

88亚洲城 4

编写翻译达成后文件结构

编译完结之后便是设置,纵然烧录了马林派官方给出的SDcard镜像,那么将来您的icroSD存款和储蓄卡分村长这么。SDcard使用读卡器接入Computer。

/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插到三月泡派上,上电就足以运营了。

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文件,只包括贰个函数,其效果为在运维后输出一条基本日志。

88亚洲城 5

sys_mysyscall.c

而后,修改Makefile中的obj-y字段,将sys_mysyscall.o参预指标文件中。将在该函数放入系统的编写翻译进程。

88亚洲城 6

Makefile

而后,你需求让操作系统知道那几个函数是管理有些系统调用的函数。此时,供给修改系统的行车制动器踏板向量表。此时急需修改arch/arm/kernel/calls.S文件。

遵照操作系统实验的课程,选取223号调用进行轮换。223号调用在x86系列架构的连串上是绝非采用的,而arm的就像如此替换也从不难点?不是很懂,不过尔尔替换未有碰着坑。

88亚洲城 7

系统中断向量表 call.S

在include/uapi/asm-generic/unistd.h头文件司令员223号调用与有个别宏进行关联,在syscall()中登记二个地点,方便调用。

88亚洲城 8

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;
}

88亚洲城 9

运营结果

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;
}

好了,今后有了内核模块,也可以有了相应的的客商程序。那么正是编写翻译运维了。

自个儿所想的内核模块编写翻译进度是这么的,一切顺遂。

88亚洲城 10

操作系统实验中的内核模块编写翻译

然后就崩了。一定是代码又过保藏期了……

既是崩了就一蹴即至喽。

错误音讯提醒的是找不到build文件夹,原本还认为是设置的时候从不带上,然后开采就是安装的时候未有带上。然则那错误和自身预想的不均等……

88亚洲城 11

编写翻译错误

作者就一脸懵逼得望着那么些错误。这么些 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,华丽丽无视之。

接下去正是注明成果的时候了,果决运转之。

88亚洲城 12

内核模块运转结果

大功告成把任何操作系统当前运作的有着进度都输出出来了。

撒花,庆祝!

二、实验内容

(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 

运维一波,欣喜来啦~

88亚洲城 13

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

百度了一下意识这么一句话

88亚洲城 14

[【转】有关pcduino
内核编写翻译难点]()

诶,然后开掘真正是生成了hwpack那个文件,我就当是编写翻译成功没再管了。(说不定就是这个问题)

接下去正是怎样将其设置到Acadia了。

先是解包,有如下文件结构。

88亚洲城 15

文本结构

Acadia有贰个板载的连串以及俩SDcard插槽,通过配备能够从中自便选三个开展运行。

88亚洲城 16

88亚洲城 17

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、在显示器的内定区域内显示字符串。(必做题)

2、在显示屏的拟订区域内画框,在框内呈现字符串。(进步题)

3、在荧屏上钦命区域内画框并以动画情势显得字符串。(选做题)

清屏子程序:

void cls(void)

{ union REGS r;

  r.h.ah=6; /*子功效号*/