linux cf卡格式,构建CF卡Linux系统的风雨历程

2023-11-04 09:59

本文主要是介绍linux cf卡格式,构建CF卡Linux系统的风雨历程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

聂军,今天继续研究把裁剪过的Linux安装到CF卡里,然后要从CF卡里运行Linux系统,之前研究过一段时间,我也已经把Linux系统都重新构建完成了。但是之后试图把裁剪的系统安装到CF卡再启动时出现了问题,首先是把系统文件原样考贝进另一个硬盘,然后重新启动,但没成功,经查,是由于考贝的时候丢掉了一些文件的权限而致,于是查阅相关资料往这个方向上走,发现用cp -Rfva命令可以正常把文件属性也一起考过来,参数a是指考贝时连属性一起进来。经过测试,成功。

2、接着试图把系统在CF卡上运行,我安上述方法把系统文件考贝进CF卡后,然后再在CF卡上手动安装了GRUB,重新启动电脑,改BIOS为从CF卡启动,结果失败。

3、接着我分析了各种可能存在的原因,并且也做了许多尝试,最终还是失败了,并没有成功从CF卡上启动Linux。由于时间关系,我又必须转向另一个任务,这个任务也就暂时搁置了,但我通过之前的尝试,基本怀疑了CF卡系统启动失败的原因。那就是可能是CF卡不支持DMA方式传输数据,系统启动时老是在DMA一处卡住了,但当时没有太多时间去研究,也就放下了。以后有时间再搞吧。

4、今天终于有时间继续来研究CF卡启动Linux的问题,经过上次的研究,我就在当时怀疑的可能出现问题的情况下往这个方向去解决这个问题,首先把BIOS里关于DMA的选项都关闭了,一个一个的尝试,但没有成功,最后在没有任何办法的时候我想到了可以换台电脑试试(因为我的PC硬件较新,我在想换个老的PC试试),终于,一换上去,成功进入了GRUB,哇,这个时候我的心情非常高兴。看来这个时候是成功的第一步啊。

5、既然进行了GRUB,那说明CF卡应该能正常工作了,下一步系统的启动如果设置正确的话应该就可以成功启动。怀着这个想法我开始尝试启动Linux,首先进入GRUB,在GRUB的命令行里写了启动Linux的命令

root (hd0,4)

kernel /boot/kernel-2.6.11.12-3 root=/dev/hda5

boot

然后回车,哇,系统内核正常进入了,但在内核的启动过程中,经过设置硬盘DMA的时候超级慢,并且有报错。我当时就怀疑这里肯定有问题,只是不知道如何解决,经过了漫长的等待,Linux终于进入到mount root fs了,但这一步出错了,提示说无法挂载根文件系统,这个问题我可是经常碰到的,只是出现在这里让人不好判断是哪里有问题。于是我回想系统启动时的屏幕打印信息,突然一闪(内核为什么会检查hdc设备呢?我的CF卡应该是hda啊?我在GRUB里传递给内核的参数也是写的root=/dev/hda5啊?)想到这一点的时候我心里似乎找到原因了(可能是系统把我的CF卡识别成了hdc),正常情况下这个结果应该只有一个原因所致,那就是我的CF卡接的IDE接口位置不对,于是我重新启动PC,进入到BIOS里,一看,哦,明白了,BIOS里显示我的CF卡处于第三个IDE位置,顿时确定了root fs挂不上的原因了,接着我把CF卡拔出来,插到IDE的第一个位置上,然后设置GRUB内核参数,再经过漫长的等待,哇,真激动人心啊,系统正常挂载了root fs,但别高兴太早了,问题又出来了,那就是系统正常进入启动了INIT进程,但没走几步,系统又提示说根文件系统又不能正常进入,到这时,我就觉得奇怪了,不是设置正确了吗?自己来回走了数趟,一边走一边思考,突然又是一闪,一个可能的原因又出来了,那就是我的系统是从另一个硬盘考贝过来的,而硬盘对应的分区不一样,现在问题很清楚了,就是出在fsttab文件的配置上,于是我马上把CF卡取下来,放到另一台电脑上把CF卡里面的fsttab文件更改正确了,然后再放回测试,哇,这次真是万分激动啊,系统真的起来了,出现了登录项。虽然系统在启动过程中提示了几个错误,不过那都是配置上的问题,不是什么大问题,正确配置就应该可以正常。于是我登录系统,进去了,非常正常的跑起来了,高兴啊。我这人有点完美主义,觉得这个系统还不完美,在启动的时候出现内核DMA设置出错,并且因为这个错误而停留非常长的时间。

6、现在的问题就是解决内核启动时加载DMA时出错的问题。我首先想到的就是在编译内核时的内核配置选项里会不会有这一项呢?于是我重新make menuconfig在里面找了个遍,也没有发现关闭或设置我需要的DMA的选项,反正是尝试嘛,于是我把内核配置选项里我怀疑是的选项都关了,然后重新编译了一个内核考贝到CF卡里,接着启动系统,但是结果总是没有那么快让人满意,问题依然存在哦,我在屋子里走来走去,想招啊!最后想来想去也没有一个可能的原因说服自己再去尝试。唉,上了个厕所,然后长叹一声,真是才思枯了吗?哦,对了,我应该问问google和baidu了,也许它们知道呢?于是我在baidu里输入了

dma error linux后回车,哇,没想到还真有许多人问这个问题,在一大堆“药”里慢慢找能医治此病的药,突然,找到了一个非常关键的一句话“启动时加了一行“ide=nodma",就好了,...”,于是我怀疑这个可能就是我需要的药哦,真是迫不及待的把系统重新启动,然后设置内核启动参数:

root (hd0,4)

kernel /boot/kernel-2.6.11.12-3 root=/dev/hda5 ide=nodma

boot

因车后,经过几十秒钟的等待,哇!结果真让人满意,问题真的解决了哦,真是高兴啊!到此为止,从CF卡里启动Linux的任务基本完成了。呵呵,高兴啊,接着要进入下一步了,系统的配置。

7、SSH服务的自启动的配置。因为这个系统是我基于LFS重新构建的系统,基本上完全靠自己去定制各种服务,平时在别的Linux发行版里如Red Hat、CentOS、ARCH、DeBian里,配置这个服务根本就不是问题,但是这个系统里就不是的哦,我通过观察系统的/etc目录下的脚本,发现没有rc.local,我自己手动创建了一个rc.local,然后把启动SSH服务的命令加到里面,重新启动系统,结果,SSH没有起来,看样子手动添加了rc.local文件没有用。于是我再进一步观察/etc/rc.d里的东西,这里面的目录我都光顾了几次,最后发现应该是在/etc/rc.d/rcsysinit.d加一个什么东西,就可以实现自启动,于是我尝试着执行了:ln -s ../init.d/sshd S100sshd命令,然后重新启动系统,呵呵,SSHD在系统启动的时候正常启动了,但是连接不上,我就怀疑可能是SSHD的启动先于了network的启动,没有读取网络信息而不能连接。然后仔细观察了一下/etc/rc.d/rcsysinit.d的文件,好像里面都是系统必须的基本服务的启动脚本。于是我在想,我的系统里的inittab设置的启动级别是“3”,应该在系统启动的时候读取rc3.d里的脚本运行,想到这一点时我就有办法了,于是我删除了/etc/rc.d/rcsysinit.d里的S100sshd文件,然后进入/etc/rc.d/rc3.d目录里执行了

ln -s ../init.d/sshd S50sshd,然后重新启动系统,哇,成功了,SSHD正常启动与工作了,我能正常连接上去哦。呵呵,系统的构建又前进了一步哦,但是同时我明白,一个从零开始的系统发展到一个可用的服务器操作系统还有很远的路要走哦。慢慢努力吧。你能行的。0b1331709591d260c1c78e86d0c51c18.png

这篇关于linux cf卡格式,构建CF卡Linux系统的风雨历程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344995

相关文章

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流