首页计算机应用 › 嵌入式与操作系统实验,操作系统实验

嵌入式与操作系统实验,操作系统实验

一、实验目标

(一)驾驭应用程序怎样调用系统调用

在平凡状态下,调用系统调用和调用壹个通常的自定义函数在代码上并不曾什么分别,但调用后发出的事体有十分的大分裂。调用自定义函数是由此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-2014-02-17的基本也是3.18。编译基本遵守松木丛派官方文书档案进行。

自身此次实验的完整思路是先在SD
card上烧录好打包好的系统镜像,而后来编写翻译的基业能够一贯放进去而不用重城建总公司体根目录。假使镜像内核版本和编写翻译内核版本差异过大的话轻松出题目。而作者选取的那一个3.18本子和小编原先操作系统实验所用的版本也比较邻近,所以基本步骤可以通用。

一经依据教程跑,并且选取交叉编写翻译的话,那么推荐编写翻译安装的时候选取贰个可见直接接触到欧洲红树莓派SD存储卡的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 };//记得在中断向量表的最后填上系统调用

但是CRUISERNN化解了那些难点,LacrosseNN中有个PAJERONN 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]

图片 1

文件夹结构

然后是设置交叉编写翻译工具,在Lab2中一度下载过,直接拿来利用就能够。

图片 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

动用上述命令接纳好项目配置就能够。小编选拔选用的是源码包内和自身托盘派对应的特别配置(官方的科目写的正是这些)。

图片 3

configuration

未来准备好以往就足以一直起始编写翻译了

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

大妈娘祈祷中………………

左右又是一段持久的编写翻译之旅。

一旦编写翻译中间有标题,一般的话先怀恋是或不是凭仗未有满意,而后若是再有怎样file
missing之类的不当小编赞成于是源码包卓殊。

完全编写翻译进度蛮顺遂的。不像某Acadia……一定是因为欧洲糙莓派长得更像本人熟练的Linux……

图片 4

编译达成后文件结构

编写翻译完结今后就是安装,假若烧录了高脚波派官方给出的SDcard镜像,那么今后你的miniSD卡分科长这么。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插到复盆子派上,上电就足以运营了。

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文件,只包蕴一个函数,其意义为在运作后输出一条基本日志。

图片 5

sys_mysyscall.c

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

图片 6

Makefile

而后,你须求让操作系统知道这几个函数是拍卖某些系统调用的函数。此时,须要修改系统的间歇向量表。此时内需修改arch/arm/kernel/calls.S文件。

遵守操作系统实验的课程,选用223号调用进行轮换。223号调用在x86类别架构的系统上是未有使用的,而arm的就好像如此替换也未尝难题?不是很懂,不过如此替换未有遇上坑。

图片 7

系统中断向量表 call.S

在include/uapi/asm-generic/unistd.h头文件中校223号调用与某些宏实行关联,在syscall()中登记三个岗位,方便调用。

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

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

好了,未来有了内核模块,也许有了相应的的客户程序。那么正是编译运营了。

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

图片 10

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

接下来就崩了。一定是代码又过有效期了……

既然崩了就化解喽。

错误音讯提醒的是找不到build文件夹,原本还认为是安装的时候从不带上,然后发现就是设置的时候未有带上。但是那错误和本身料想的不同……

图片 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,华丽丽无视之。

接下去正是认证成果的时候了,果断运营之。

图片 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.1第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 

运作一波,欣喜来啦~

图片 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

百度了一下发觉这么一句话

图片 14

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

诶,然后发掘确实是生成了hwpack这一个文件,小编就当是编写翻译成功没再管了。(说不定就是这个问题)

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

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

图片 15

文本结构

Acadia有三个板载的系统以及俩SDcard插槽,通过安排能够从中大肆选一个开展运营。

图片 16

图片 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从Computer上转到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; /*子作用号*/

转载本站文章请注明出处:ca888亚洲城唯一官网 https://www.axypet.com/?p=2409

上一篇:

下一篇:

相关文章