📄 peizhi2.6.txt
字号:
楼主你好,看了你写的文章,非常精彩,我也是按白兰瓜的所说的,按照你列的步骤进行了以下内核移植,但是巧的是移植完以后最后在超级终端下显示的信息也和白兰瓜一样,是Kernel panic - not syncing: No init found. Try passing init= option to kernel.我还是个菜鸟,当然说不出所以然来,还得向你这位高手请教,到底问题出在哪里?我用的开发板虽然不是博创的(扬创,听过吗?)但是,我想问题的性质可能是相同的,还有,我在vivi下的分区是:
vivi->> part show
mtdpart info. (4 partitions)
name offset size flag
-----------------------------------------------
vivi : 0x00000000 0x00040000 0 256k
param : 0x00040000 0x00020000 0 128k
kernel : 0x00060000 0x00200000 0 2M
root : 0x00260000 0x01900000 0 25M
vivi->>
但是使用bon part show命令以后,又出现另外一个分区信息,这是怎么回事?
vivi->> bon part show
BON info. (6 partitions)
No: offset size flags bad
---------------------------------------------
0: 0x00000000 0x00020000 00000000 0 128k
1: 0x00020000 0x00010000 00000000 0 64k
2: 0x00030000 0x00200000 00000000 0 2M
3: 0x00230000 0x00300000 00000000 0 3M
4: 0x00530000 0x039f8000 00000001 2 57M+992k
5: 0x03f30000 0x000cc000 00000000 0 816k
那么到底内核移植成功后在文件系统安装之前启动kernel后在超级终端下能看到什么?是否可以使用shell?我真是不好意思问这么烂的问题,让你见笑了!多谢你的赐教。可以的话,能否邮箱联系呢?# zhy 发表于2008-03-25 20:29:16 IP: 221.7.40.*
我的电子邮箱地址是:bwm_007@163.com QQ:627405172
多谢啦#项 发表于2008-05-07 07:18:32 IP: 211.69.207.*
楼主,我也是迫切需要编译好的zImage和root.cramfs,请问可以发给我吗,我的邮箱 jiawei716@163.com QQ 31489386#guowei 发表于2008-05-08 20:47:46 IP: 60.177.50.*
楼主,我也遇到点问题,这几天弄得头都大可,能不能把zImage和root.cramfs发给我。谢谢 邮箱 ghwjob@126.com QQ437587394#skywalker_nick 发表于2008-05-09 09:03:57 IP: 61.155.18.*
全发了……#wendsia 发表于2008-05-15 10:40:35 IP: 58.216.220.*
楼主,问个弱弱的问题啊,在网上可以找到arm-linux-3.4.1之类的交叉编译器,那还要自己建立交叉编译环境吗?这两个有什么关系啊?
能把你编译好的image和root.cramfs发给我吗?wendsia@163.com#wendsia 发表于2008-05-15 10:42:56 IP: 58.216.220.*
楼主,问个弱弱的问题啊,在网上可以找到arm-linux-3.4.1之类的交叉编译器,那还要自己建立交叉编译环境吗?这两个有什么关系啊?
能把你编译好的image和root.cramfs发给我吗?wendsia@163.com#skywalker_nick 发表于2008-05-15 14:32:01 IP: 61.155.18.*
下载到了就直接用咯……#出会い系サイト 发表于2008-05-17 01:12:07 IP: 124.24.238.*
出会い系出会い系サイト出会い喫茶出会い掲示板ナンパ出会いカフェ人妻出会い無料系サイト優良出会い系攻略完全無料。アダルトビデオアダルト動画アダルトアニメアダルト画像アダルトサイト無料DVDアダルト風俗サンプル無料風俗優良アダルトサイト比較海外。人妻画像人妻パラダイス知合い人妻援護会人妻コレクション風俗告白。熟女画像東京熟女掲示板動画熟女ビデオおまんこオナニー。エロ画像エロフラッシュアニメエロ動画エロゲームエロ漫画無料エロサイト。エッチ画像エッチ動画エッチ小説写真エッチアニメエッチ0930。セックスアナルセックス画像セックス動画セックスフレンドスワッピング#wendsia 发表于2008-05-17 21:06:52 IP: 58.216.220.*
哦,那你有时间一定记得啊。我自己再研究研究,谢谢啊!
基于2.6.19内核的小型Linux系统制作与移植
--------------------------------------------------------------------------------
发布日期:2007-9-6
摘 要: 介绍了如何制作一个基于Linux2.6.19内核的小型Linux系统,并将其移植到S3C2410开发板上。内容包括引导程序、2.6.19内核、根文件系统的修改、配置、编译、移植等。
关键词: Linux2.6.19内核;小型Linux系统;S3C2410
引言
ARM9 S3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。
S3C2410微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T核的微处理器。它带有内存管理单元(MMU),采用0.18mm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。
在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛[1]。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。
与Linux2.4内核相比,2.6内核吸收了最新的技术,在性能、可测量性、器件支持和可用性方面有了大幅度提高;支持更多的体系结构、处理器、总线、接口和设备;标准化了内部接口;简化了扩展或添加新设备的步骤等。
本文着重介绍如何制作一个基于linux-2.6.19内核的小型Linux操作系统,并将它移植到S3C2410开放板上。内容包括交叉编译环境的建立,引导程序、2.6.19内核、根文件系统的修改、配置、编译、移植等。
系统的制作移植
建立交叉编译环境
要移植、开发小型Linux系统,首先要在安装了RedHat9或更高版本Linux操作系统的主机上配置交叉开发环境。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。
针对本次开发,需要安装arm-linux-gcc-3.4.1以及armv4l-tools工具链。在安装完毕后,切记要将两者的路径分别添加到系统路径$PATH中。
引导程序
对于计算机系统来说,从开机上电到操作系统启动需要一个引导程序。嵌入式linux系统同样离不开引导程序,这个引导程序叫做Bootloader[1]。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内核做好准备。
vivi[4]是韩国MIZI公司为其ARM9系列产品而研发的Bootloader,小而灵巧,这里选用它作为小型Linux系统的Bootloader。
首先要修改vivi源代码中的Flash分区信息,新的分区信息如表1所示。
根据表1,在vivi源码arch/s3c2410/smdk.c文件中作出相应的修改。
然后在配置菜单中导入smdk2410的默认配置,编译成功将在vivi源代码目录下生成所需的Bootloader文件,文件名为vivi。
接着,便可把vivi下载到目标板Flash的相应位置。
内核
·修改内核
首先,修改内核源码linux-2.6.19下的Makefile文件,指定目标代码类型与编译器:SUBARCH :=arm;CROSS_COMPILE:=/usr/local/arm/3.4.1/bin/arm-linux-。
然后,在linux-2.6.19/arch/arm/mach-s3c2410/common-smdk.c中根据表1修改内核中的Flash分区信息。这里提醒读者,2.6.16(含)以前内核的源码中没有Flash分区信息,所以需要增加新的分区信息;而在2.6.17(含)以后内核的源码中已含Flash分区信息,需要的只是修改分区信息。
内核Flash分区信息必须与vivi的Flash分区信息相一致。因为,vivi的Flash分区中的地址是内核及文件系统下载到Nand flash的真正地址;而内核在启动时读的却是内核Flash分区设定的地址;所以,若两者不同,则很可能导致不能正常启动内核或读取文件系统。
最后,修改linux-2.6.19/drivers/mtd/nand/s3c2410.c,禁止Nand flash差错检测: chip->eccmode = NAND_ECC_NONE;。
·内核的配置编译
在配置菜单中导入内核对smdk2410的默认配置,再在此基础上选择所需的功能。如Nand Flash及MTD设备的支持,Cramfs文件系统的支持等。
配置完毕,在终端输入编译命令“make”进行编译。若内核源码编译成功,将在linux-2.6.19/arch/arm/boot/下生成内核映像文件zImage。
最后,在vivi命令提示模式下使用下载命令,将内核映像zImage加载到开发板Flash中的适当地址。
根文件系统
Linux系统中的文件和设备是通过文件系统来组织的。文件系统的存在使得数据和设备可以被有效而透明地存取访问。一个linux的最简根文件系统应该包括支持linux系统正常运行的基本内容,包括系统使用的软件和库,以及所有用来为用户提供基本支持的架构和指令。
在根文件目录rootfs下建立bin、dev、etc、lib、proc、sbin、root、tmp等一系列必备的目录,把所需的配置文件、动态函数库放到相应的目录。采用BusyBox是缩小根文件系统的好办法。BusyBox以很小的体积集成了最常用的linux命令和应用程序,大大简化了制作linux根文件系统的过程。
有一点必须指出的是,在2.6.12(含)之前的内核通常是用devfs来管理位于/dev下的所有块设备和字符设备;但在2.6.13(含)之后的内核已不支持devfs,而转用udev来管理/dev下的设备,详见[5]。所以,针对2.6.19内核,要使系统启动后进入BusyBox控制台,还需在/rootfs/dev下添加控制台设备文件:“[root@localhost dev]# mknod -m 600 console c 5 1”。
目前,linux已经能够支持几十种文件系统格式,如常用的Cramfs、Jfss2、Yaffs等。Cramfs 是一种只读的闪存文件系统,可以保护系统的基本设置不被更改。根文件系统就使用Cramfs格式。
使用Cramfs制作工具mkcramfs把根文件目录制作成映像文件:rootfs.cramfs。
根文件系统制作完成,在vivi命令模式下把rootfs.cramfs下载到Flash的合适位置。
至此,一个基于2.6.19内核的小型Linux系统便成功地制作完毕,并移植到S3C2410开发板上了。
板子加电后便可看到系统的启动信息,最终进入BusyBox控制台。
结语
基于2.6内核的Linux凭借其突出的嵌入式特性与性能优越的ARM9 S3C2410相结合,在嵌入式领域有着广阔的应用天地。文章介绍了如何制作一个基于Linux2.6.19内核的小型Linux系统,并将其移植到S3C2410开发板上。小型系统的制作与移植是进行嵌入式开发的基础,必须熟练掌握。
参考文献:
1、 孙纪坤、张小全,‘嵌入式linux系统开发技术详解——基于ARM’,人民邮电出版社,2006.
2、 陈赜,‘ARM9嵌入式技术及Linux高级实践教程’,北京航空航天大学出版社,2005
3、 中国liunx公社论坛上帖子,‘Linux2.6.10以后版本对S3C2410的支持’.
4、 mizi公司网站上有关vivi的介绍,
http://www.mizi.com/developer/s3c2410x/Linuette_chap_5_en.html
5、 有关udev的介绍http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.htm
注:这个驱动的移植主要是是将原来的2..4.18内核中的1341驱动程序直接往2.6.11上移植的,没有采用ALSA。移植过程中也曾经参考过一些资料,具体是哪位大虾的资料忘记了,在此感谢文中所参考的资料的大虾们
硬件环境:SBC-2410X开发板(CPU:S3C2410X)
内核版本:2.6.11.1
运行环境:Debian2.6.8
交叉编译环境:gcc-3.3.4-glibc-2.3.3
第一部分 声卡UDA1341TS驱动程序播放部分的移植
一、从网上将Linux内核源代码下载到本机上,并将其解压:
#tar jxf linux-2.6.11.1.tar.bz2
二、打开内核顶层目录中的Makefile文件,这个文件中需要修改的内容包括以下两个方面。
(1)指定目标平台。
移植前:
ARCH ?= $(SUBARCH)
移植后:
ARCH :=arm
(2)指定交叉编译器。
移植前:
CROSS_COMPILE ?=
移植后:
CROSS_COMPILE :=/opt/crosstool/arm-s3c2410-linux-gnu/gcc-3.3.4-glibc-2.3.3/bin/arm-s3c2410-linux-gnu-
注:这里假设编译器就放在本机的那个目录下。
三、添加并修改驱动程序源代码,这涉及到以下几个方面。
(1)、将开发板配带的声卡驱动程序s3c2410-uda1341.c源程序放到sound/oss/目录下。
#cp s3c2410-uda1341.c ./sound/oss
(2)、在s3c2410-uda1341.c驱动程序里面添加所用到的头文件:
#include
#include
#include
#include
注:因为在修改驱动程序里需要用到有关的寄存器,而以上几个头文件中定义了相关的寄存器。
添加:
static struct s3c2410_dma_client s3c2410_dma_client_out ={
.name ="I2SSDO",
};
static struct s3c2410_dma_client s3c2410_dma_client_in={
.name ="I2SSDI",
};
static void audio_dmaout_done_callback(s3c2410_dma_chan_t *r_value,void *buf_id, int size,s3c2410_dma_buffresult_t result);
static void audio_dmain_done_callback(s3c2410_dma_chan_t *r_value,void *buf_id, int size,s3c2410_dma_buffresult_t result);
注:在2.6.11的内核接口函数中(s3c2410_dma_request(),s3c2410_dma_set_buffdone_fn()),需要用到以上结构以及函数作为入口参数。
添加:sbc_gpio_con_set()、sbc_gpio_pullup_set()、sbc_gpio_function_set()的声明以及实现代码用以替代2.4.18代码中的write_gpio_bit()、set_gpio_ctrl()函数,因为在2.4.18中这两个函数都是用指针的方式对CPU寄存器进行设置,而在2.6.11的驱动程序里面用了__raw_writel()的方式对寄存器设置进行了封装。
由于在2.6.11内核中dma接口函数的修改,在驱动程序移植过程中用了2.6.11的许多函数对2.4.18中的函数进行了替换,主要有:
用dma_free_coherent()替代了consistent_free(),用s3c2410_dma_ctrl(s->dma_ch,S3C2410_DMAOP_FLUSH)替代了s3c2410_dma_flush_all(s->dma_ch),用dma_alloc_coherent()替代了consistent_alloc(),用s3c2410_dma_enqueue()替代了s3c2410_dma_queue_buffer(),用s3c2410_dma_request()替代了s3c2410_request_dma()。
移植代码过程中还对许多函数进行了修改,主要修改的函数有:
audio_set_dsp_speed(),init_s3c2410_iis_bus_rx(),init_s3c2410_iis_bus_tx():用__raw_writel()函数对CPU寄存器进行了设置;audio_init_dma():采用以下函数对系统的DMA通道进行初始化设置,用s3c2410_dma_devconfig()设置CPU中的DISRC、DISRCC、DIDST、DIDSTC寄存器,用s3c2410_dma_config()设置CPU的DCON寄存器,用s3c2410_dma_set_buffdone_fn()设置DMA回调函数(注意回调函数的修改)、用s3c2410_dma_setflags()设置DMA的flags。
注:具体修改详见驱动程序。
(3)、在include/asm/arch-s3c2410/regs-iis.h文件中添加如下宏定义:
#define S3C2410_IISREG(x) ((x)+S3C2410_VA_IIS)
#define S3C2410_SBC_IISCON S3C2410_IISREG(0X00)
#define S3C2410_SBC_IISMOD S3C2410_IISREG(0x04)
#define S3C2410_SBC_IISPSR S3C2410_IISREG(0x08)
#define S3C2410_SBC_IISFCON S3C2410_IISREG(0x0c)
#define S3C2410_SBC_IISFIFO S3C2410_IISREG(0x10)
注:以上所定义的宏,都被驱动程序所用到。
(4)、修改arch/arm/mach-s3c2410/s3c2410.c,在s3c2410_iodesc结构中添加:IODESC_ENT(IIS),
IODESC_ENT(GPIO)
注:由于网卡的硬件连接上用到了系统的IIS总线,以上添加的语句就是为了将CPU的IIS寄存器的物理地址映射到所指向的虚拟地址上去,上面的结构还定义了网卡虚拟地址所占用的区间,并指定了该区间所指向的域(的属性)。
(5)、修改sound/oss/目录下的Kconfig文件,在最后添加如下内容:
config SBC2410_SND_UDA1341
tristate "S3C2410 UDA1341 driver (SBC2410)"
depends on SOUND_PRIME!=n && SOUND && ARM && ARCH_SMDK2410
help
Say Y here if you have an SMDK2410 and want to use its Philips
UDA1341 audio chip.
(6)、修改sound/oss/目录下的Makefile文件,在最后添加如下内容:
obj-$(CONFIG_SBC2410_SND_UDA1341) +=s3c2410-uda1341.o
四、配置、编译内核。在内核顶层目录当中键入:
#make smdk2410_defconfig
由于2.6的内核默认就支持了S3C2410,所以就有一个默认的内核配置文件。里面只是包括了一个简单的配置,要使声卡编译进内核,还要进行手工配置。
#make menuconfig
Sound --->
Open Sound System --->
[*] S3C2410 UDA1341 driver (SBC2410)
将刚才添加的声卡驱动程序静态添加到内核当中。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -