基于S3C2410X的Linux-2.6.14.1系统移植

 
基于S3C2410X的Linux-2.6.14.1系统移植 (转载)
作者:小o博客之家 2008-09-06 17:31:00
标签:
 
基于S3C2410X的Linux-2.6.14.1系统移植

Leslie 小o QQ:54523758
renqiang10@sina.com
2008.7 桂林电子科技大学7教102实验室
衷心感谢所有对本文有所帮助的人。本文仅供交流,无意侵权

TARGET
CPU:S3C2410X
SDRAM:HY57V561620(32MB)× 2
FLASH:K9F1208(64MB)
NET:CS8900
HOST
LinuxRealseVersion:FecoraCore6linux-2.6.18
CrossCompiler:gcc-4.1.1/arm-linux-gcc-3.4.1
一、内核移植(2.6.14.1)
下载内核2.6.14 和交叉编译工具3.4.1,详细参考这个文档:
http://www.hfrk.net/S3C2410/kaifa/05122311085973789_56.htm
1修改linux2.6.14.1下面的makefile文件
找到ARCH和CROSS_COMPILE,修改
ARCH?=arm
CROSS_COMPILE?=/usr/local/arm/3.4.1/bin/arm-linux-
(此处为你交叉编译的路径)
2设置flash分区
在arch/arm/machs3c2410/devs.c文件中添加头文件
#include<linux/mtd/partitions.h>
#include<linux/mtd/nand.h>
#include<asm/arch/nand.h>
然后建立分区表

staticstructmtd_partitionpartition_info[]={
{
name:"vivi", //分区名字,任意
size:0x00020000, //分区大小
offset:0x0,//分区的起始地址,相对于0x0的偏移
},{
name:"param",
size:0x00010000,
offset:0x00020000,
},{
name:"kernel",
size:0x00200000,
offset:0x000b0000,
},{
name:"root",
size:0x01e00000,
offset:0x002b0000,
},{
name:"user",
size:0x01e80000,
offset:0x020b0000,
}
};

structs3c2410_nand_setnandset={
nr_partitions:5, //分区数量
partitions:partition_info, //分区表
};

structs3c2410_platform_nandsuperlpplatform={
//NANDFlash芯片支持
//参数意义可参考S3C2410手册
tacls:0,
twrph0:30,
twrph1:0,
sets:&nandset,
nr_sets:1,
};

structplatform_devices3c_device_nand={
.name="s3c2410-nand",

.id=-1,

.num_resources=ARRAY_SIZE(s3c_nand_resource),
.resource=s3c_nand_resource,

.dev={
.platform_data=&superlpplatform
}
};
指定启动时初始化
arch/arm/machs-3c2410/mach-smdk2410.c文件
找到platform_device*smdk2410_devices[]__initdata函数,在该函数体最后
加上一条语句:
&s3c_device_nand,
禁用禁止FlashECC校验(有不同说法)
修改drivers/mtd/nand/s3c2410.c
找到chip->eccmode=NAND_ECC_SOFT;
改为chip->eccmode=NAND_ECC_NONE;
支持启动挂载devfs
修改fs/Kconfig文件
找到menu"Pseudofilesystems"添加
configDEVFS_FS
bool"/devfilesystemsupport(OBSOLETE)"
defaulty
configDEVFS_MOUNT
bool"Automaticallymountatboot"
defaulty
dependsonDEVFS_FS
3Yaffs2文件系统支持
详细请看这个贴:http://www.hfrk.net/S3C2410/kaifa/061400335345164_30.htm
为了让开发板可以使用可读可写的文件系统,进行yaffs移植,首下载
yaffs2.tar.gz源码包,解压源码,并进入目录执行
#./patch-ker.shc/linux-2.6.14.1/ (注:假定内核源码/linux-2.6.14.1/)
编译内核,makemenuconfig
在filesystem中的
Miscellaneousfilesystems --->里面的yaffs选项如下进行选择
<*>YAFFS2filesystemsupport
-*- 512byte/pagedevices
[] Useolder-styleon-NANDdataformatwith
pageStatusbyte
[*] LetsYaffsdoitsownECC
[*] UsethesameeccbyteorderasStevenHill's
nand_ecc.c
-*- 2048byte(orlarger)/pagedevices
[*] Autoselectyaffs2format
[*] Disablelazyloading
[*] Turnoffwidetnodes
[*] Forcechunkerasecheck
[*] CacheshortnamesinRAM
最主要是选这个LetsYaffsdoitsownECC,没选就会有n多的错误。
这样yaffs就移植成功了,把/driver/mtd/nand/nand_base.c里面的
printk(KERN_WARNING"WritingdatawithoutECCtoNAND-FLASHisnot
recommended/n")
printk(KERN_WARNING"ReadingdatafromNANDFLASHwithoutECCisnot
recommended/n");
这两句话注释掉,不注释的话那个ECC警告会烦死人的。
4编译配置内核
首先需要load一个默认的内核
#cp/linux-2.6.14.1/arch/arm/configs/s3c2410_defconfig/linux-2.6.14.1/.config,
在这个配置文件上改
Loadablemodulesupport>
[*]Enableloadablemodulesupport
[*]Automatickernelmoduleloading
SystemType>
[*]S3C2410DMAsupport
Bootoptions>
Defaultkernelcommandstring:
noinitrdroot=/dev/mtdblock3init=/linuxrcconsole=ttySAC0,115200
Floatingpointemulation>
[*]NWFPEmathemulation
DeviceDrivers>
MemoryTechnologyDevices(MTD)>
[*]MTDpartitioningsupport
#支持MTD分区,这样我们在前面设置的分区才有意义
[*]Commandlinepartitiontableparsing
#支持从命令行设置flash分区信息,灵活
RAM/ROM/Flashchipdrivers>
<*>DetectflashchipsbyCommonFlashInterface(CFI)probe
<*>DetectnonCFIAMD/JEDECcompatibleflashchips
<*>SupportforIntel/Sharpflashchips
<*>SupportforAMD/Fujitsuflashchips
<*>SupportforROMchipsinbusmapping
NANDFlashDeviceDrivers>
<*>NANDDeviceSupport
<*>NANDFlashsupportforS3C2410/S3C2440SoC
Characterdevices>
[*]Nonstandardserialportsupport
[*]S3C2410RTCDriver
Filesystems>
<>Secondextendedfssupport#去除对ext2的支持
Pseudofilesystems>
[*]/devfilesystemsupport(OBSOLETE)
[*]Automaticallymountatboot(NEW)
[*]/procfilesystemsupport
[*]Virtualmemoryfilesystemsupport(formershmfs)
#这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
Miscellaneousfilesystems>
<*>YAFFS2filesystemsupport#支持yaffs2
<*>CompressedROMfilesystemsupport(cramfs)#支持cramfs
NetworkFileSystems>
<*>NFSfilesystemsupport
然后就可以Make了。编译完成后在arch/arm/boot下会有一个zImage。这
样就有了个最最基本的内核,已经是可以启动的。
二、LCD驱动移植
1在arch/arm/mach-s3c2410/mach-smdk2410.c中添加
//lcd
#include<asm/arch/regs-lcd.h>
#include<asm/arch-s3c2410/fb.h>
//-------------------------------------------lcd
staticstructs3c2410fb_mach_infos3c2410_lcd_info__initdata={
.fixed_syncs=0,
.regs={
//对于寄存器的设置是关键,可参考S3C2410X的手册
//和LCD技术手册中对于LCD技术指标的描述来进行设置。
//其中,寄存器值的宏定义在regs-lcd.h文件中。

.lcdcon1=S3C2410_LCDCON1_TFT16BPP
|S3C2410_LCDCON1_TFT|S3C2410_LCDCON1_CLKVAL(1),
.lcdcon2=S3C2410_LCDCON2_VBPD(1)
|S3C2410_LCDCON2_VFPD(2)|S3C2410_LCDCON2_VSPW(1),
.lcdcon3=S3C2410_LCDCON3_HBPD(6)
|S3C2410_LCDCON3_HFPD(2),
.lcdcon4=S3C2410_LCDCON4_MVAL(13)
|S3C2410_LCDCON4_HSPW(4),
.lcdcon5=S3C2410_LCDCON5_FRM565
|S3C2410_LCDCON5_INVVLINE|S3C2410_LCDCON5_HWSWP
|S3C2410_LCDCON5_PWREN|S3C2410_LCDCON5_INVVFRAME,
},
.lpcsel=0x0,
.gpccon=0xaaaaaaaa,
.gpccon_mask=0xffffffff,
.gpcup=0xffffffff,
.gpcup_mask=0xffffffff,
.gpdcon=0xaaaaaaaa,
.gpdcon_mask=0x0,
.gpdup=0xffffffff,
.gpdup_mask=0xffffffff,
.width=640,
.height=480,
.xres={640,640,640},
.yres={480,480,480},
.bpp={16,16,16},
};
staticvoid__initsmdk2410_lcd_init(void)
{
set_s3c2410fb_info(&s3c2410_lcd_info);
}
2在文件最后MACHINE_END之前添加
.init_machine=smdk2410_lcd_init,
3编译内核,选中所装驱动
#makemenuconfig
DeviceDrivers>
Graphicssupport--->
<*>supportforframebufferdevices
<*>S3C2410LCDframebuffersupport
Logoconfiguration--->//开机画面的选择,可据个人需要更改
[*]Bootuplogo
[*]Standard224-colorlinuxlogo
4开机画面的选择
首先把要开机Logo图片(png格式)放在linux2.6.14文件中的
drivers/video/logo中,终端选择进入drivers/video/logo目录,进行以下操作:
(假设开机图片名为linux.png)
#pngtopnmlinux.png>linuxlogo.pnm
#pnmquant224linuxlogo.pnm>linuxlogo224.pnm
#pnmtoplainpnmlinuxlogo224.pnm>linuxlogo224.ppm
#mvlinuxlogo224.ppmlogo_linux_clut224.ppm//替换原来的启动文件
三、根文件系统制作(Busybox1.9.2)
1建一个目录myfs用来装文件系统
2#mkdirbindevetchomelibmntprocrootsbintmpusrvar
#mkdirusr/binusr/sbin
#mkdirmnttmpvar
#chmod1777tmp
#mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
#mkdirvar/libvar/lockvar/logvar/runvar/tmp
#chmod1777var/tmp
#mkdirhomerootboot
3到系统/dev把所有的device打一个包,拷贝到dev下面(最省事的做法);
或者使用mknod来自己建所需要的device,
举例:
#mknod-m600dev/consolec51
#mknod-m666dev/nullc13
4应用程序定制
标准的Linux发行版本具有功能种类比较多的应用程序,这些应用程序占用
的空间也很大,这对存储容量空间有限的开发板来说就不是理想的选择,在嵌入
式开发过程中,经常用BusyBox来定制应用程序。BusyBox具有shell的功能,它
能提供系统所需要的大部分工具,包括编辑工具、网络工具、模块加载工具、压
缩解压缩工具、查找工具、帐号密码管理工具和进程相关工具等。
目前BusyBox的最新版本是BusyBox-1.9.2版本,下载解压,切换到BusyBox
的根目录下,修改Makefile,找到ARCH和CROSSCOMPILE修改如下:
ARCH?=arm
CROSS_COMPILE?=/usr/local/arm/3.4.1/bin/arm-linux-
5修改编译配置选项。
#makedefconfig
#makemenuconfig
在默认的选项前提之下,选项设置如下:
BusyBoxSettings--->
BuildOptions--->(采用静态编译)
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
注意,启用这个选项的时候,要把/busybox-1.9.2/applets/applets.c中的
一段话注释掉,就是下面那段

Installoptin-->
[*]Don'tuse/usr//可以不选,选了则没有/usr文件夹
BusyboxLibraryTuning--->
(2)MD5:TradeBytesforSpeed
[*]Faster/procscanningcode(+100bytes)
[*]Supportfor/etc/networks
[*]Additionaleditingkeys
[*]vi-stylelineeditingcommands
[*]Historysaving
[*]Tabcompletion
[*]Usernamecompletion
[*]Fancyshellprompts
LinuxModuleUtilities--->
[]Supportversion2.2.xto2.4.xLinuxkernels//不能选
[*]Supportversion2.6.xLinuxkernels
LinuxSystemUtilities--->
[*]Supportfortheold/etc/mtabfile//不确定
MiscellaneousUtilities--->
[*]devfs(obsolete)//不确定
[*]Usedevfsnamesforalldevice(obsolete)//不确定
Shell--->
Chooseyourdefaultshell(ash)-->
---ash//下面的选项全部选择
6编译busybox
makeinstall
在busybox/_install目录下会生成我们需要的文件。
把busybox1.9.2/_install里面的全部文件拷贝到该目录,注意用命令拷,
#cp–abusybox1.9.2/_install/*/myfs
否则一些软链接可能会出错,或者权限方面会出问题
修改_install/bin/busybox的属性。为4755
#chmod4755./_install/bin/busybox
必须要修改属性,否则在busybox中很多命令会受限。
将编译好的busybox拷贝到/bin下面。拷贝时带上参数-arf或者-dpR。
除了busybox外,所有其他的命令都是他的link
/sbin下面也是busybox的link。
7非常重要之/lib,务必重视
/lib的库其实就是进行busybox编译的库,即交叉编译器的库,我们这里使用的
是3.4.1(位置/usr/local/arm/3.4.1)。
# cd /usr/local/arm/3.4.1/arm-linux/lib
# for file in libc libcrypt libdl libm libpthread libresolv libutil
> do
> cp $file-*.so rootfs/lib (复制到你做的文件系统的/lib目录下)
> cp -d $file.so.[*0-9] rootfs/lib
> done
# cp -d ld*.so* rootfs/lib
8系统配置文件的建立
系统配置文件放在/etc目录下
(1)profile文件
#Setsearchlibrarypath
exportLD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
#Setuserpath
PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
aliasll='ls-l'
#SetPS1USER=”`id–un`”
LOGNAME=$USER
PS1=’[/u@/h/W]/$’
PATH=$PATH
exportUSERLOGNAMEPS1PATH
(2)fstab文件
proc/procprocdefaults00
none/tmpramfsdefaults00
mdev/devramfsdefaults00
sysfs/syssysfsdefaults00
(3)inittab文件
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount-a-r
::shutdown:/bin/umount-a-r
::shutdown:/sbin/swapoff-a
(4)创建/etc/init.d文件夹和rcS,在rcS中添加
#!/bin/sh
#设置主机名,需要在etc建立文件host
./etc/host
hostname${HOSTNAME}
#mountallfilesystemdefinedin“fstab”
echo"#mountall..........."
/bin/mount-a
echo"#Startingmdev........."
/bin/echo/sbin/mdev>/proc/sys/kernel/hotplug
mdev–s
(5)host文件
HOSTNAME=Hasotech
(6)创建mdev.conf文件(空文件)
(7)复制主机/etc/下面的文件passwd,group,shadow文件到/etc
#cp/etc/group.
#cp/etc/passwd.
#cp/etc/shadow.
修改passwd中用户使用的shell名称。FC6上默认的为bash,而vivi只支持
ash。
root:x:0:0:root:/root:/bin/bash-->
root:x:0:0:root:/root:/bin/ash
(8)修改各文件和文件夹的权限
#chmod755/rootfs/etc/init.d/rcS
#chmod755/rootfs/etc/host
9cramfs文件系统映像的制作(cramfs压缩率比较高)
在FTP中下载cramfs-1.1.tar.gz,解压到自己设定的目录下,如:
tarxzvfcramfs-1.1.tar.gz–C/home/
进入生成有mkcramfs文件的目录下(一定要进入此目录,否则会提示找不到该命
令)
输入命令:#./mkcramfs/rootfsrootfs.cramfs
在当前目录下即生成rootfs.cramfs映像文件。到此Linux操作系统移植完
毕。
10yaffs文件系统映像文件的制作
使用mkyaffsimg程序可以把一个目录做成一个yaffs映像文件,然后使用usb
下载到
板子上。进入文件系统目录层,使用以下命令。
#mkyaffsimgrootfsrootfs.img
这样就会在该目录下生成rootfs.img映像文件,下载到开发板运行即可。
PS:vivi设置
1SBC2410x的VIVI已经被友善之臂自动加入了USB功能,这个小功能省去了我们
很多麻烦。所以建议大家先把板子的USB驱动装上。
重新分区
分区名称分区大小
vivi 128k
param 64k
kernel 2M
root 30M
user 30M+512k
在vivi命令行下输入如下命令
partshow
然后输入: partdel<name>
参数name为各个显示分区的名字,一直到把所有分区都删除为止,然后依次
输入:
partaddvivi0x00x000200000
partaddparam0x000200000x000100000
partaddkernel0x000b00000x002000000
partaddroot0x002b00000x01e000000
partadduser0x020b00000x01e800000
partsave
现在分区就已经完毕了。
vivi的分区一定要与内核里的分区设置一致,即与
arch/arm/machs3c2410/devs.c里staticstructmtd_partition
partition_info[]分区一致,至少是kernel后的地址一致,这个需特别注意。
2设置启动参数
执行: paramshow
就可以见到你现在的所有VIVI参数,其中linuxcommandline为传递给linux
内核
的启动参数。因2.4与2.6在参数方面有变动,所以输入如下命令:
paramsetlinux_cmd_line“noinitrdroot=/dev/mtdblock3init=/linuxrc
console=ttySAC0,115200”
paramsave
网卡安装
14的网卡和24的有差别,注意别用错了。
1.cs8900.c和cs8900.h放到/drivers/net/arm/
2.在cs8900.c中的cs8900_probe()函数中,memset(&priv,0,sizeof
(cs8900_t));函数之后添加如下两条语句:
__raw_writel(0x2211d110,S3C2410_BWSCON);
__raw_writel(0x1f7c,S3C2410_BANKCON3);
添加头文件#include<asm/arch/regs-mem.h>
3.修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容:
configARM_CS8900
tristate"CS8900support"
dependsonNET_ETHERNET&&ARM&&ARCH_SMDK2410
help
4.修改drivers/net/arm/目录下的Makefile文件,在最后添加如下内容:
obj-$(CONFIG_ARM_CS8900) +=cs8900.o
5. 在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到
smdk2410_iodesc[]结构数组,添加如下如下内容:{vSMDK2410_ETH_IO,
0x19000000,SZ_1M,MT_DEVICE}
添加头文件#inlcude<asm/arch/smdk2410.h> 其实这个就是下面的
那个头文件的链接/include/asm-arm/arch-s3c2410/smdk2410.h
6.在include/asm-arm/arch-s3c2410/目录下创建smdk2410.h文件,其内容
为:
#ifndef_INCLUDE_SMDK2410_H_
#define_INCLUDE_SMDK2410_H_
#include
#definepSMDK2410_ETH_IO 0x19000000
#definevSMDK2410_ETH_IO 0xE0000000
#defineSMDK2410_ETH_IRQ IRQ_EINT9
#endif//_INCLUDE_SMDK2410_H_
7.编译内核,选中所装驱动
#makemenuconfig
Networkingsupport --->
Ethernet(10or100Mbit) --->
[*] CS8900support
然后内核make即可
已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-PlusShiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页