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

2019-07-15 18:30发布

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




现在在做什么:
                  linux的内核太复杂,牵扯到很多数据结构,我还是刚上大三的本科生,很多数据结构得自己补习。
                 给自己的短期目标就是:读懂一个轻量级的操作系统内核 -------FreeRTOS
为什么要读linux内核:
linux 的网络特性是其他操作系统难以企及的,现在是物联网的时代,很多嵌入式产品需要有强大网络功能作为后台,毫无疑问的是,linux已经霸占了服务器了。所以想读懂他。但就我现在这个水平还差很远。

不知道有没有相同指向的同僚,可以一起讨论。我会在这帖子里发布一些自己的学习历程,也算是我努力奋斗的见证!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
落雪倾城
1楼-- · 2019-07-15 23:22
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<<"当前可用指令
                                CreateList(int n)//创建深度为n的链表
                                OutputList//输出当前链表的内容
                                LenthList//查询当前链表长度
                                ClearList//清除当前链表
                                DeleteList//删除当前链表的第几个节点 ";
                                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查询可使用指令 或者询问开发者陈景研"<<endl;break;
                }
        }
}

int main()
{        

        ListShell();// 启动shell 管理程序

        return 0;//一直执行这个程序,理论上不会执行到这一步
}
dazhanhongtu
2楼-- · 2019-07-16 01:27
来错地方了,这里是以硬件为主,搞软件去 CSDN。

你的变量名太简单,注释多了点,注释和前面的代码最好留点空格
落雪倾城
3楼-- · 2019-07-16 02:03
dazhanhongtu 发表于 2014-9-19 13:21
来错地方了,这里是以硬件为主,搞软件去 CSDN。

你的变量名太简单,注释多了点,注释和前面的代码最好留 ...

是              谢谢提醒啊
创新cpu
4楼-- · 2019-07-16 06:22
Linux现在已经商业化了,要学习操作系统设计过于复杂。可以自己用FPGA先设计一个能够执行用户程序的单片机试试,就会弄明白操作系统的内核是怎么回事,在具有了这方面的基础之后,再去研究商用操作系统内核设计会好些。
zhou2sheng
5楼-- · 2019-07-16 07:39
 精彩回答 2  元偷偷看……
1563661808
6楼-- · 2019-07-16 12:58
极力推荐《由尚德系列讲座之linux内核编程入门》,学习linux内核从0.11版本的源码开始看起,这个视频讲源码讲的很详细,一行一行的讲   来自微博——电子发烧友lisa

一周热门 更多>