linux版本的安装问题

来源:互联网 发布:ahhhh网络用语什么意思 编辑:程序博客网 时间:2024/05/16 05:00

       拿着还是12年买的郭天祥的arm7开发板,重新学习uclinux相关内容,首先在虚拟机中安装redhat4,以前一直是井底之蛙,现在才知道别说redhat4了,就是redhat9都是老掉牙的东西了,apt-get for redhat4 没有,看到for redhat9有,就下了,结果安装教程不明朗确定,问题百出,遂放弃直接用ubuntu14 高级货。。。这说明还是要紧跟时代的步伐,老学些老掉牙的东西,不仅知识体系是旧的,而且很麻烦,学着很痛苦。

       首先还是用虚拟机装的ubuntu14,装好后巨卡,也难怪,同时又win7和ubuntu运行,我这华硕破电脑担待不起,于是用U盘启动在d盘安装了ubuntu14 麒麟版本。果然比土的掉渣的redhat9 炫酷多了,很有苹果mac os 的感觉。小激动后,准备研究linux内核的第一步工作:即建立内核树,这个内核树到底是个什么概念,现在其实也没搞清楚,先不管了,毕竟知识是一步步学的,不要让前面太多分支的东西干扰主线,后面有基础了回过头来再学就轻松了。

       百度,翻墙google,搞清基本步骤:

(1)$apt-get install build-essential kernel-package libncurses5-dev libncurses5 ,把工具安装了,没管具体有啥用,先安了再说,还是那句话,对于初学者,如果抱着什么都想立马知道,会学得很痛苦,先把当前的事干好了再说;

(2)apt-get install linux-source-2.6.32 下载内核,那个版本号可以搜下最新的;

(3)解压缩 用 tar -gxvf path(linux-source的路径);

(4)make menuconfig ,save和load 都是.config

  (5)开始编译 make -j4(笔记本双核)(忘了多久,反正从晚上7点多到第二天早上弄编译好了);

(6)make bzImage 可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x ;

  (7)make modules ;

  (8)make modules_install 搞定 内核树建立好了

 (9)选个目录建立一个linuxq文件夹,里面好放例子,比如helloworld驱动例子,需要hello.c Makefile 两个文件,代码分别为:

 //hello.c 
#include <linux/init.h> 
#include <linux/module.h> 
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) 

printk(KERN_ALERT "Hello, world\n"); 
return 0; 
}

static void hello_exit(void) 

printk(KERN_ALERT"Goodbye, cruel world\n"); 
}

module_init(hello_init); 
module_exit(hello_exit);

//Makefile

obj-m := hello.o
KERNELDIR := /lib/modules/2.6.32-21-generic/build
PWD := $(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions $(TARGET)

需要注意的是makefile的格式$(MAKE)前面要加个tab.

make 编译,不出现错误的话,用ls -al查看linux_modules目录下产生了如下文件:
hello.c   hello.mod.c  hello.o   modules.order
hello.ko  hello.mod.o  Makefile  Module.symvers

其中hello.ko就是可加载的模块文件

现在我们就可以将编译好的模块helloworld加载到内核中去了

#insmod ./hello.ko   //这个命令把hello.ko加载到内核

#lsmod|grep hello   //lsmod 这个命令可以查看当前所有的驱动模块,结果应该显示hello 680 0

#rmmod hello         //这个命令是把hello这个模块移除掉

程序的输出结果可以在
/var/log/syslog文件中查看

Hello,World
Goodbye,cruel world

这是程序的输出。


0 0
原创粉丝点击