ImageVerifierCode 换一换
格式:DOCX , 页数:83 ,大小:1.69MB ,
资源ID:7805789      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7805789.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(S3C6410移植linux教程.docx)为本站会员(11xg27ws)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

S3C6410移植linux教程.docx

1、Linux3.6.7 在 OK6410 平台的移植(一)前言对于我这个新手而言,第一次学习 linux,面对庞大的代码,复杂的程序结构和自身对linux 知识的严重缺乏,一下子还真不知道该做什么。想想开发板厂家提供的演示程序,其过程是这样:先运行 bootloader,bootloade 引导 linux 内核启动,启动后再运行 UI 程序。对应的程序也有三个分别为 u-boot.bin zImage 和 rootfs.yaffs2.最初的想法是 linux 内核启动就是这个 zImage,但这个 rootfs.yaffs 到底是何方妖怪?来这里做甚?初步认为是一个UI(用户界面),后面随着移

2、植的深入,才明白这是一个根文件系统,当然里面包含了 UI的应用程序。好吧,一直在 linux 门外徘徊也不是办法,不管怎样,硬着头皮进去看看再说。于是我决定先编译一个能够启动的 linux 内核,这个内核对于开发板上一些外部设备的驱动先不去管它,主要达到的目的是能够启动。我当时对“启动” 的理解就是能够运行到有一个 shell 界面。后面对文件系统,根文件系统等等概念稍微理解后才明白“启动” 和 shell界面还是两个部分。启动包括 linux 必要的一些初始化,系统的或外部设备的。初始化完成后 linux 还要通过读取某些文件才能够运行 shell 程序。而这些文件就包含在这个rootfs.

3、yaffs2 中(其实 shell 程序也包含在这个文件中 )。这就涉及到几个概念,文件系统,根文件系统,yaffs2 文件系统,yaffs2 根文件系统。在网上稍微了解后,对这几个概念有了初步的理解:linux 内核启动后需要读取的这些文件需要放在某个地方(SDRAM 或者 NANDflash 或者是宿主机的硬盘上)中。放在 SDRAM 中的比如有个ramdisk,它是一个设备,相当于在 SDRAM 中建立了一个“ 硬盘”,里面就放好了这些运行文件(初步印象,未进一步了解);放在 NAND flash 的有 cramfs 或者 yaffs 等等,而cramfs 比较适合用于 Nor flas

4、h 上,yaffs 适合 Nand flash 上;放在宿主机上的有 NFS 根文件系统。那么,yaffs2 文件系统和 yaff2 根文件系统不是一回事吗?想想以前用过STM32 做一些实验时有个 FATFS,好像也是文件系统,当时用这个系统从 SD 卡中读取图片、文档,而 SD 卡首先必须格式化为 FAT32(FAT)类型。yaffs2 文件系统就有点像这个 fatfs,我们把它包含在 linux 程序中意味着 linux 能够采用这种格式去读取一些文件。yaff2 根文件系统就是把包含有 linux 启动必须的脚本和目录的这些文件采用 yaffs2 这种格式打包,然后放在 Nand fl

5、ash 中。简单理解就相当于先把 NAND 的某个区域“ 格式化”为yaffs2 格式,再把这些文件放在 NAND 上面。最初的理解就是这样了,那么,接下来我们要做的事就是先“启动” ,再运行“shell”。Linux3.6.7 在 OK6410 平台的移植(二)编译配置linux3.6.71.修改主目录下 Makefile:ARCH ?= $(SUBARCH)CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:“%“=%)改为:ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.5.1/bin/arm-linux-2.arch

6、/arm/mach-s3c64xx 目录下2.1 拷贝个 mach-mini6410.c 重命名为 mach-ok6410.c 并修改其内容:2.1.1 把所有 mini6410 字样都替换为 ok6410,注意是小写2.1.2 把所有 MINI6410 字样都替换为 OK6410,注意是大写2.1.3 修改 static struct mtd_partition ok6410_nand_part /* 0 = .name = “uboot“,.size = SZ_1M,.offset = 0,1 = .name = “kernel“,.size = SZ_2M,.offset = SZ_1M

7、,2 = .name = “rootfs“,.size = MTDPART_SIZ_FULL,.offset = SZ_1M + SZ_2M,*/改为.name = “Bootloader“,.offset = 0,.size = (2 * SZ_1M),.mask_flags = MTD_CAP_NANDFLASH,.name = “Kernel“,.offset = (2 * SZ_1M),.size = (5*SZ_1M) ,.mask_flags = MTD_CAP_NANDFLASH,.name = “File System“,.offset = (7 * SZ_1M),.size

8、= (200*SZ_1M) ,.name = “User“,.offset = MTDPART_OFS_APPEND,.size = MTDPART_SIZ_FULL,2.2 修改 Kconfig 文件,参照 Mini6410 的配置,加入 OK6410 如下:config MACH_OK6410bool “OK6410“select CPU_S3C6410select S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C64XX_SETUP_SDHCIselect S3C_DEV_USB_HOSTselect S3C_DEV_NANDselect S3C_

9、DEV_FBselect S3C64XX_SETUP_FB_24BPPselect SAMSUNG_DEV_ADCselect SAMSUNG_DEV_TShelpMachine support for the FORLINX OK64102.3 修改 Makefile 文件,参照 MINI6410,加入 OK6410 如下:obj-$(CONFIG_MACH_OK6410) += mach-ok6410.o3. 修改 arch/arm/tools/mach-types 文件,加入 OK6410 的 mach-type,这个必须和U-BOOT 中的 MACH-TYPE 一致,这里选用 smdk

10、6410 的 mach-type:1626。如下:ok6410 MACH_OK6410 OK6410 16264.回到主目录下执行 Make menuconfigrootubuntu:/home/my# cd linux-3.6.7/rootubuntu:/home/my/linux-3.6.7# make menuconfig 配置如下:4.1 先选择 Load an Alternate Configuration File,输入arch/arm/configs/s3c6400_defconfig4.2 选择 General Setup,打开 Cross_compiler tool perf

11、ix,输入/usr/local/arm/4.5.1/bin/arm-linux-4.3 选择 System Type,取消 SMDK6400 ,Abreak;找到 if (!chip-ecc.strength) pr_warn(“Driver must set ecc.strength when using hardware ECCn“);BUG();把 BUG();屏蔽掉4.主目录下 make menuconfig:找到 Device Drivers Memory Technology Device (MTD) support -NAND Device Support - 取消 NAND s

12、upport for Samsung S3C24xx S3C64xx ,选择 NAND support for Samsung S3C64xx S5P64xx保存后退出然后 make uImage,烧写后运行如下:Starting kernel .Uncompressing Linux. done, booting the kernel.Booting Linux on physical CPU 0Linux version 3.6.7 (rootubuntu) (gcc version 4.5.1 (ctng-1.8.1-FA) ) #3 Mon Dec 3 21:15:19 CST 201

13、2CPU: ARMv6-compatible processor 410fb766 revision 6 (ARMv7), cr=00c5387dCPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cacheMachine: OK6410Memory policy: ECC disabled, Data cache writebackCPU S3C6410 (id 0x36410101)S3C24XX Clocks, Copyright 2004 Simtec Electronicscamera: no p

14、arent clock specifiedS3C64XX: PLL settings, A=533000000, M=533000000, E=24000000S3C64XX: HCLK2=266500000, HCLK=133250000, PCLK=66625000 mout_apll: source is fout_apll (1), rate is 533000000mout_epll: source is epll (1), rate is 24000000mout_mpll: source is mpll (1), rate is 533000000usb-bus-host: so

15、urce is clk_48m (0), rate is 48000000audio-bus: source is mout_epll (0), rate is 24000000audio-bus: source is mout_epll (0), rate is 24000000audio-bus: source is mout_epll (0), rate is 24000000irda-bus: source is mout_epll (0), rate is 24000000camera: no parent clock specifiedCPU: found DTCM0 8k 000

16、00000, not enabledCPU: moved DTCM0 8k to fffe8000, enabledCPU: found DTCM1 8k 00000000, not enabledCPU: moved DTCM1 8k to fffea000, enabledCPU: found ITCM0 8k 00000000, not enabledCPU: moved ITCM0 8k to fffe0000, enabledCPU: found ITCM1 8k 00000000, not enabledCPU: moved ITCM1 8k to fffe2000, enable

17、dBuilt 1 zonelists in Zone order, mobility grouping on. Total pages: 65024Kernel command line: noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200PID hash table entries: 1024 (order: 0, 4096 bytes)Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)Inode-ca

18、che hash table entries: 16384 (order: 4, 65536 bytes)Memory: 256MB = 256MB totalMemory: 256772k/256772k available, 5372k reserved, 0K highmemVirtual kernel memory layout:vector : 0xffff0000 - 0xffff1000 ( 4 kB)DTCM : 0xfffe8000 - 0xfffec000 ( 16 kB)ITCM : 0xfffe0000 - 0xfffe4000 ( 16 kB)fixmap : 0xf

19、ff00000 - 0xfffe0000 ( 896 kB)vmalloc : 0xd0800000 - 0xff000000 ( 744 MB)lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)modules : 0xbf000000 - 0xc0000000 ( 16 MB).text : 0xc0008000 - 0xc02828ec (2539 kB).init : 0xc0283000 - 0xc029db94 ( 107 kB).data : 0xc029e000 - 0xc02ca7c0 ( 178 kB).bss : 0xc02cb024 -

20、0xc02fc0c4 ( 197 kB)SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1NR_IRQS:246VIC f6000000: id 0x00041192, vendor 0x41VIC f6010000: id 0x00041192, vendor 0x41sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286msConsole: colour dummy device 80x30Calib

21、rating delay loop. 353.89 BogoMIPS (lpj=1769472)pid_max: default: 32768 minimum: 301Mount-cache hash table entries: 512CPU: Testing write buffer coherency: okSetting up static identity map for 0x501ddc68 - 0x501ddcc4DMA: preallocated 256 KiB pool for atomic coherent allocationsOK6410: Option string

22、ok6410=0OK6410: selected LCD display is 480x272s3c64xx_dma_init: Registering DMA channelsPL080: IRQ 73, at d0846000, channels 08PL080: IRQ 74, at d0848000, channels 816S3C6410: Initialising architecturebio: create slab at 0usbcore: registered new interface driver usbfsusbcore: registered new interfa

23、ce driver hubusbcore: registered new device driver usbROMFS MTD (C) 2007 Red Hat, Inc.io scheduler noop registeredio scheduler deadline registeredio scheduler cfq registered (default)start plist testend plist tests3c-fb s3c-fb: window 0: fbSerial: 8250/16550 driver, 4 ports, IRQ sharing disableds3c6

24、400-uart.0: ttySAC0 at MMIO 0x7f005000 (irq = 69) is a S3C6400/10console ttySAC0 enableds3c6400-uart.1: ttySAC1 at MMIO 0x7f005400 (irq = 70) is a S3C6400/10s3c6400-uart.2: ttySAC2 at MMIO 0x7f005800 (irq = 71) is a S3C6400/10s3c6400-uart.3: ttySAC3 at MMIO 0x7f005c00 (irq = 72) is a S3C6400/10brd:

25、module loadedloop: module loadedS3C NAND Driver, (c) 2008 Samsung ElectronicsNandFlash is busying.forlinx nandflash dev_id=d5forlinx*Nandflash:ChipType= MLC ChipName=samsung-K9GAG08U0D*S3C NAND Driver is using hardware ECC.NAND device: Manufacturer ID: 0xec, Chip ID: 0xd5 (Samsung NAND 2GiB 3,3V 8-b

26、it), page size: 4096, OOB size: 218Driver must set ecc.strength when using hardware ECCCreating 4 MTD partitions on “NAND 2GiB 3,3V 8-bit“:0x000000000000-0x000000200000 : “Bootloader“0x000000200000-0x000000700000 : “Kernel“0x000000700000-0x00000cf00000 : “File System“0x00000cf00000-0x000080000000 :

27、“User“ohci_hcd: USB 1.1 Open Host Controller (OHCI) Drivers3c2410-ohci s3c2410-ohci: S3C24XX OHCIs3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000s3c2410-ohci s3c2410-ohci: init err (00000000 0000)s3c2410-ohci s3c2410-ohci: c

28、ant start s3c24xxs3c2410-ohci s3c2410-ohci: startup error -75s3c2410-ohci s3c2410-ohci: USB bus 1 deregistereds3c2410-ohci: probe of s3c2410-ohci failed with error -75mousedev: PS/2 mouse device common for all micei2c /dev entries driversdhci: Secure Digital Host Controller Interface driversdhci: Co

29、pyright(c) Pierre Ossmans3c-sdhci s3c-sdhci.0: clock source 0: mmc_busclk.0 (133250000 Hz)s3c-sdhci s3c-sdhci.0: clock source 2: mmc_busclk.2 (24000000 Hz)mmc0: SDHCI controller on samsung-hsmmc s3c-sdhci.0 using ADMAs3c-sdhci s3c-sdhci.1: clock source 0: mmc_busclk.0 (133250000 Hz)s3c-sdhci s3c-sdh

30、ci.1: clock source 2: mmc_busclk.2 (24000000 Hz)mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hzmmc0: mmc_rescan_try_freq: trying to init card at 300000 Hzmmc1: SDHCI controller on samsung-hsmmc s3c-sdhci.1 using ADMAmmc0: mmc_rescan_try_freq: trying to init card at 200000 Hzusbcore: regi

31、stered new interface driver usbhidusbhid: USB HID core driverVFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5drivers/rtc/hctosys.c: unable to open rtc device (rtc0)VFS: Cannot open root device “mtdblock2“ or unknown-block(0,0): error -19Please append a correct “root=“ boot opt

32、ion; here are the available partitions:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) (unwind_backtrace+0x0/0xf0) from (panic+0x8c/0x1dc) (panic+0x8c/0x1dc) from (mount_block_root+0x1dc/0x2a0) (mount_block_root+0x1dc/0x2a0) from (prepare_namespace+0x160/0x1b8) (prepar

33、e_namespace+0x160/0x1b8) from (kernel_init+0x168/0x1b0) (kernel_init+0x168/0x1b0) from (kernel_thread_exit+0x0/0x8)可以看到红色部分表示 NAND 驱动已经改好了。内核没有运行起来说明后面还缺少文件系统。Linux3.6.7 在 OK6410 平台的移植(四)搭建YAFFS2 根文件系统1. 内核加入 YAFFS2 文件系统,编译参考前面这篇: Linux3.6.7 在 OK6410 平台的移植(三)NAND HWECC 8BIT 驱动2. make menuconfig 配置如下

34、:2.1Device Drivers 配置2.1.1. Generic Driver Options 选择* Maintain a devtmpfs filesystem to mount at /dev * Automount devtmpfs at /dev, after the kernel mounted the 2.1.2 MTDCaching block device access to MTD devices2.2File Systems 配置取消 Second extended fs support 和 Ext3 journalling file system support*

35、 Miscellaneous filesystems -选择2.3 Boot options 配置输入“noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200“3.制作 mkyaffs2image 工具进入 yaffs2 源码目录下 utils 目录,修改 mkyaff2image.c:#define chunkSize 2048#define spareSize 64#define pagesPerBlock 64改为#define chunkSize 4096#define sp

36、areSize 218#define pagesPerBlock 128进入 yaffs2 源码目录下 direct 目录,修改 yportenv.h增加#define CONFIG_YAFFS_DEFINES_TYPES保存后 make,这时就在 utils 目录生产 mkyaffs2image 文件,把这个文件拷贝到/usr/bin 目录下4.制作根文件系统下面写的过程大部分是参考这篇文章:http:/ 解压 busybox1.20.2,修改 MakefileCROSS_COMPILE ?=/usr/local/arm/4.5.1/bin/arm-linux-ARCH ?= arm4.2

37、配置 busybox 菜单如下:a、make defconfig(默认配置)b、make menuconfigBusybox Settings -Build Options -(/usr/local/arm/4.5.1/bin/arm-linux-) Cross Compiler prefixBusybox Settings -General Configuration -* Dont use /usr 4.3 编译、安装a、makeb、make install(由于前面没设置安装位置将默认安装在本文件夹的_install 文件夹下)4.4 进入_install 建立其他根文件系统文件夹. 我

38、写了个脚本 creat_initramfs.sh#!/bin/shecho “-Create root,dev“mkdir root dev etc bin sbin mnt sys proc lib home tmp var usrmkdir usr/sbin usr/bin usr/lib usr/modules usr/etcmkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.dmkdir lib/moduleschmod 1777 tmpsudo mknod -m 600 dev/console c 5 1sudo mknod -m 666 dev/n

39、ull c 1 3echo “-make direction done-“然后保存脚本修改权限:chmod +x creat_initramfs.sh运行脚本!4.5 建立相关文件4.5.1 在 etc 目录下创建 profile 文件,内容如下# Ash profile# vim: syntax=sh# No core files by defaultulimit -S -c 0 /dev/null 2if (need_skip 0) printf (“Attempt to write outside the flash arean“);*length = 0;return -EINVAL;

40、if (!need_skip elserval = nand_write (nand, offset, length, buffer);if (rval = 0)return 0;*length = 0;printf (“NAND write to offset %llx failed %dn“,offset, rval);return rval;红色部分是我后面加上去的。修改后把这三个文件写到 NAND 中,启动后运行如下:# Booting kernel from Legacy Image at 50008000 .Image Name: Linux-3.6.7Image Type: AR

41、M Linux Kernel Image (uncompressed) Data Size: 1410288 Bytes = 1.3 MiBLoad Address: 50008000Entry Point: 50008040Verifying Checksum . OKXIP Kernel Image . OKOKStarting kernel .Uncompressing Linux. done, booting the kernel.Booting Linux on physical CPU 0Linux version 3.6.7 (rootubuntu) (gcc version 4.5.1 (ctng-1.8.1-FA) ) #17 Mon Dec 3 00:30:47 CST 2012CPU: ARMv6-compatible processor 410fb766 revision 6 (ARMv7), cr=00c5387dCPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cacheMachine: OK6410Memory policy: ECC disabled, Data cache writeback

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报