首页 > 编程知识 正文

nohup命令不输出日志,单片机串口打印printf

时间:2023-05-06 20:27:06 阅读:165154 作者:52

《操作系统》课程设计报告课程设计主题:操作系统课程设计时间: 2016/1/10一、课程设计目的及要求有待完成内容: (1)虚拟机安装: Vmware、VMwarepalyer(free )推荐) 安装和使用VMLox Linux (推荐的SUSE ) (注意,其中包含内核源代码和内核开发工具等)3)配置和重组Linux内核源代码)4)找到VFS和特定文件系统的源代码) 涉及)如何表示virtual file switch ) ) 65 (只需选择读或写函数)7)使用dmesgc查看背景的输出。 可以添加的功能(8)复制ext3或ext4的源代码(注意与当前使用的文件系统的差异),修改makefile,使用模块编译方法9 )修改并更新ext3或ext4的源代码(至少需要修改文件系统的名称,希望能够针对文件写入操作在系统后台打印信息。 (10 )动态加载、卸载新文件系统。 二、课程设计内容(1)虚拟机安装)2) Linux的安装与使用) Linux内核源代码的构成与重组)4)新文件系统的提取与动态加载与卸载) 3、课程设计设备与环境设备信息: PC

虚拟机: VM11

四、设计正文)包括分析和设计思路、各模块的流程图、标注的主要算法源代码、内核编译过程以及动态模块加载过程等,如有改进或扩展, 请重点用一小节说明)1)虚拟机的安装)2) Linux的安装和使用(注意包括内核源和内核开发工具等)安装OpenSUSE,下载与之相近的

内核的初始版本

下载的源包

(3)利用Linux内核的源代码配置和重组vmtools (虚拟机提供的可以在宿主机和虚拟机之间自由复制文件的工具),将内核软件包复制到虚拟机,然后将/home/a123 /

*由于分配的磁盘空间很小,内核源未存储在/usr/src目录中。 如果存储在/usr/src目录中,则会出现空间不足。 附件:磁盘分配/交换分区(2.4G/)根目录(11G/home )用户目录) 13G

解压缩的内核源文件在编译前需要稍加修改。 (6)此外,没有向编译器传达编译功能的config文件。 可以使用make menuConfig命令生成Config文件,但需要自己选择相应的功能,这太复杂了。 现在,您下载的内核源版本很接近,因此有一种简单的方法,就是使用在/boot目录下使用CP/boot/config-3.11.6-的现有配置文件版本

注意:必须在内核所在的文件目录中成功复制此命令

只要运行make menuconfig命令,进入选择界面,直接保存并退出,新版本的Linux就可以直接运行make,一步完成所有编译工作,而本次课程设计采用的是以前的编译方式

运行make bzImage命令——完成压缩内核的编译

运行make modules命令——编译模块

运行make modules_install命令——以安装模块

注:

在make menuconfig中,在通用设置中更改了版本号

运行make install命令——以安装新内核

重新启动

内核修复安装完成。 (4)找到VFS和特定文件系统的源代码(ext3或ext4 ) VFS )虚拟文件系统。 正如名字所示。 它为APP应用程序程序员提供了抽象,阻止了各种底层文件系统之间的差异。 Linux的文件系统是面向对象设计的,因此Linux的文件系统可以非常容易地扩展,并且可以很容易地向Linux添加新的文件系统。 作为此主要对象之一的super_block位于中

代码量巨大,这是因为部分代码Ext4位于fs文件夹下的Ext4文件夹内

现在打开file.c并在vim中打开file.c的部分代码如下

)5)阅读VFS和具体的文件系统如何关联(如何表现virtual file switch ) )如)4)中已经叙述的那样,VFS是用c语言编写的面向对象设计,例如SB-s_op-allloc_inode ) sinode此处与面向对象语言的区别在于,在面向对象的语言中,实例方法可以访问this,因此可以访问其所有成员,但在c中无法访问图1显示了调用对文件的写入操作的过程

)6)找到具体文件系统的读或写函数,使用printk (使用与printf相同的方法)在后台打印文件,读写信息。 (只需选择read或write函数即可)由于Linux系统对文件的操作是通过函数调用实现的,因此在此修改vfs这一层,找到fs,将目录下的read_write.c

(七)使

用dmesg –c查看后台的输出。

(8) 复制ext3或ext4的源代码(注意与当前使用的文件系统有区别),修改Makefile文件,使用模块编译方式

(9) 修改ext3或ext4的源代码,实现新的文件系统。(至少需要修改文件系统的名称,最好能对文件写操作向系统后台打印出信息。)

使其在加载和卸载的时候能够printk到buffer缓冲中(10) 动态加载和卸载新的文件系统。使用insmod语句加载使用lsmod语句加载

加载成功接下来使用dmesg 查看缓冲区内容

成功接下来使用rmmod语句卸载模块

成功五、 课程设计结果及分析课程设计结果:成功分析:Linux文件系统使用了面向对象的设计方法,保证了其对用户的透明,VFS层实现了系统与文件系统的无关性,增加了系统对不同文件系统的兼容性。六、 总结与进一步改进设想总结:1.编译内核的时候,可以使用make XXX –j8这样可以开启多线程编译(我的虚拟机分配的是8核心),加快编译速度2.printk语句我写的是printk(”””DoingRead”);本意是利用printk的优先级,将其输出到用户态的控制台,结果语法错误,并没有输出到控制台改进设想:修改的文件前加上语句,实现对控制台的输出

define KERN_EMERG 0(因为缺少这个宏,导致系统并没有理解我的0是什么意思)

七、 答辩(或汇报)记录(包括问题和答案,每个人不少于3个)

显示内核版本

使用dmesg –c命令

加载新模块

八、 参考文献

鸟哥的Linux私房菜

百度百科:printk概述http://baike.baidu.com/link?url=Kv5e2xb9thGENkIvSQmjpkYb8kbKoNvEhmt2oICTmDAn0wj2YADVf8dsrzBtz2fRt0uwa_3joQ-o40wKwwL68a

Linux虚拟文件系统(VFS)http://www.cnblogs.com/yuyijq/archive/2013/02/24/2923855.html

LinuxEXT4文件系统分析http://wenku.baidu.com/link?url=Wi-vyrROUIJqRk4eSsuwOwRe0Sf-ydXamWNR0H2HCrN9CPHJg80lXpu0Gi_ZGT-X5yKnknl86ooHdckHhJxybmyBR2szWsPDOV0IPJ6fJXO

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。