微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 目标读懂linux内核,有一同努力的朋友不?

目标读懂linux内核,有一同努力的朋友不?

时间:10-02 整理:3721RD 点击:
现在自己的基础:                                            项目经验:做过四轴飞行器项目,简单2D画图机  
                    平台经验:会用STM32 MSP430 51 单片机 和CPLD
                    编程语言:C/C++,JAVA
                    硬件驱动 : 写过液晶屏,摄像头驱动程序,无线蓝牙。(流水灯什么的就不算了)
                  
目标很简单:读懂linux内核,因为之前用单片机做底层开发,感觉自己可以弄懂其中硬件的原理。只要完全读懂了linux的内核,那就可以修剪linux,创造自己的操作系统。准备用ARM11来作为移植linux的平台


现在在做什么:
                  linux的内核太复杂,牵扯到很多数据结构,我还是刚上大三的本科生,很多数据结构得自己补习。
                 给自己的短期目标就是:读懂一个轻量级的操作系统内核 -------FreeRTOS
为什么要读linux内核:
linux 的网络特性是其他操作系统难以企及的,现在是物联网的时代,很多嵌入式产品需要有强大网络功能作为后台,毫无疑问的是,linux已经霸占了服务器了。所以想读懂他。但就我现在这个水平还差很远。
不知道有没有相同指向的同僚,可以一起讨论。我会在这帖子里发布一些自己的学习历程,也算是我努力奋斗的见证!

3月19日  单向链表基本全部写完
struct Node//定义节点的数据结构
{
   int Data;//数据
   Node * Next;//递归调用自身,指向下一个节点指针地址,指向下一个结构体的地址
};

class List{
        Node *head; //创建一个指针类似数组的第一个元素,这一步基本上代表了已创建链表
public:
          Node* CreateList(int n);  //工作要求,创建深度为n的链表 ,成功
        void OutputList(Node * L); //工作要求,输出链表,成功
        int LenthList(Node * L);   //工作要求,输出链表长度 ,成功
        void ClearList(Node * L); //工作要求,清空当前链表,成功
        Node* DeleteList(Node * L,int nData); //删除当前链表的第几个节点
        void insertList(int aDate,int bDate); //链表结点的插入
}
定义了一些方法,都是自己独立编程,掌握一个重要的数据结构。
linux的队列方面好像用的就是这个数据结构
自己写了个shell程序 linux的shell功能实现应该和我的方法差不多

unsigned char doString(char *str)
{
     if(strcmp(str,"HELP")==0)
          return 0;
         if(strcmp(str,"CreateList")==0)
         {
          return 1;
         }
         if(strcmp(str,"LenthList")==0)
         {
          return 2;
         }
         if(strcmp(str,"OutputList")==0)
         {
          return 3;
         }
         if(strcmp(str,"ClearList")==0)
         {
          return 4;
         }
         if(strcmp(str,"DeleteList")==0)
         {
      return 5;
         }
         return 99;
}

void ListShell(void)
{
    char str[50];
        Node * TEMPN;  //节点存放位置,现在最多支持查询一个链表,声明为全局变量
         List TEMP;     //方便使用函数
         int n=0;//存放深度
        cout<<"单项链表Shell程序,更新时间9月8日"<<endl;
        cout<<"开发者:陈景研"<<endl;
        while(1)
        {
                cout<<"intput command@Jingyan:  ";
                cin>>str; //输入指令
                switch( doString(str))
                {
                case 0: cout<<"当前可用指令 \n \
                                CreateList(int n)//创建深度为n的链表\n \
                                OutputList//输出当前链表的内容\n \
                                LenthList//查询当前链表长度\n \
                                ClearList//清除当前链表\n \
                                DeleteList//删除当前链表的第几个节点\n";
                                break;
        case 1: cout<<"输入链表深度 n"<<endl; cin>>n; TEMPN=TEMP.CreateList(n);cout<<"深度为"<<n<<"的链表创建成功"<<endl;break;
                case 2: n=TEMP.LenthList(TEMPN);cout<<"当前建链表长度为"<<n<<endl;break;
                case 3: TEMP.OutputList(TEMPN);cout<<"输出完毕"<<endl;break;
                case 4: TEMP.ClearList(TEMPN);cout<<"当前链表清空完毕"<<endl;break;
                case 5: cout<<"输入需要删除节点的位置"<<endl; cin>>n;  TEMPN=TEMP.DeleteList(TEMPN,n);break;
                case 99:  cout<<"指令不正确,输入HELP查询可使用指令\n或者询问开发者陈景研"<<endl;break;
                }
        }
}
int main()
{        
        ListShell();// 启动shell 管理程序
        return 0;//一直执行这个程序,理论上不会执行到这一步
}

来错地方了,这里是以硬件为主,搞软件去 CSDN。
你的变量名太简单,注释多了点,注释和前面的代码最好留点空格

是              谢谢提醒啊

Linux现在已经商业化了,要学习操作系统设计过于复杂。可以自己用FPGA先设计一个能够执行用户程序的单片机试试,就会弄明白操作系统的内核是怎么回事,在具有了这方面的基础之后,再去研究商用操作系统内核设计会好些。

少年,加油咯!明确目标就能做好。

极力推荐《由尚德系列讲座之linux内核编程入门》,学习linux内核从0.11版本的源码开始看起,这个视频讲源码讲的很详细,一行一行的讲   来自微博——电子发烧友lisa

感觉小编高大上啊~

小编大三就这么有追求了! 想想自己大学那会,真心低端啊!小编加油!

嘿嘿!原来群主的英文名就是lisa啊! 这个资料我下载了,目前只到第四部分!

FPGA写单片机吗?FPGA没有单片机灵活,写起来不方便吧。我个人认为FPGA超越单片机的地方仅仅在于他的程序可以并行执行的,而单片机只能是单核心,我认为操作系统很难在FPGA上实现,毕竟很少有人在这上面花时间。VHDL我也学过一些,实在是没有C语言完美啊~

谢谢指点,我会看的

小编,FPGA只是一个材料工场,你想做什么电路设计都可以。你可以将FPGA设计成单片机,而且能让这个单片机是多核的。操作系统怎么不能在FPGA上设计?VHDL和Verilog HDL都是硬件编程语言,c是软件程序设计语言,它们作用不同。单片机用汇编会效率更高,不用c语言完全可以。小编这么年轻,前途无量。弄明白CPU设计对你学习操作系统会帮助更大。

请问,FPGA有开源的操作系统代码么?操作系统貌似需要很多人来维护开发的吧,我不认为我能独立撰写操作系统,内存调度,任务管理。我感觉在已有操作系统的基础上做出修改和剪裁,这个能力我还是有的~~

我觉得小编应该掌握操作系统原理就好了,然后需要改哪一部分,再慢慢研究哪一部分;
个人认为小编见解比较片面;
FPGA也好,单片机也好,都是用来完成我们需要的工作任务的利器,不存在谁比谁灵活,只有谁更适合做哪一类工作。

小编留个qq交流呀

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top