FL2440 Linux-3.0最小系统移植
来源:互联网 发布:Windows wifi 登录 编辑:程序博客网 时间:2024/06/03 18:24
来自:www.kansnow.com
一、源码修改
Linux 是一个源码开放的操作系统,无论是普通用户还是企业用户都可以编写自己的内核代码,再加上对标准内核的裁剪从而制作出适合自己的操作系
统。Linux操作系统有很多发行版本,如Redhat, CentOS, Ubuntu等等,但所有的这些Linux操作系统都是选择一个Linux内核稳定版本,外加不同的C基础
库和应用程序构建的一个操作系统。
嵌入式Linux系统开发其本质就是我们拿到源码并进行修改DIY(Do It Yourself)一个属于我们自己的操作系统,这个过程包括Booloader和Linux内核(裁
剪)移植、驱动模块编写、根文件系统制作、第三方应用程序移植等,这个工作叫做BSP(Board Support Packet,板级支持包)开发,这里面需要相应的硬
件协议、操作系统、以及C语言和数据结构等知识,难度较高。
/* 创建好目录后linux内核3.0下载 */[zhoupiaolong@localhost fl2440-dir]$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.0.tar.bz2[zhoupiaolong@localhost fl2440-dir]$ tar -xjf linux-3.0.tar.bz2
修改1:
SMDK2440上使用的是16MHz的晶振,而FL2440上使用的是12MHz的晶振,所以开发板相应代码要做修改
[zhoupiaolong@localhost linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.cstatic void __init smdk2440_map_io(void){s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));- s3c24xx_init_clocks(16934400);+ s3c24xx_init_clocks(12000000);s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));}
修改2:
我的u-boot给Linux内核传的machine ID值为1999,而Linux内核里smdk2440开发板对应的machine ID是362,所以我们要修改内核代码让
smdk2440的machine ID与u-boot里的保持一致,这里我们在源码中将两个machine ID值互换:
[zhoupiaolong@localhost linux-3.0]$ vim arch/arm/tools/mach-types-s3c2440 ARCH_S3C2440 S3C2440 362+s3c2440 ARCH_S3C2440 S3C2440 1999... ...-mini2440 MACH_MINI2440 MINI2440 1999+mini2440 MACH_MINI2440 MINI2440 362
修改3:
samsung的串口驱动设备名字默认叫ttySAC,而我们一般使用ttyS,所以将源码中的设备名改掉:
[zhoupiaolong@localhost linux-3.0]$ vim drivers/tty/serial/samsung.c-#define S3C24XX_SERIAL_NAME "ttySAC"+#define S3C24XX_SERIAL_NAME "ttyS"
修改4:
修改顶层Makefile的ARCH为arm, CROSS_COMPILE为我们自己相应的交叉编译器:
[zhoupiaolong@localhost linux-3.0]$ vim Makefile-ARCH ?= $(SUBARCH)-CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)+ARCH ?= arm //arm后面不能有任何字符我之前就是应为这里多个空格导致运行后卡死。+CROSS_COMPILE ?= /opt/xtools/arm920t/bin/arm-linux- //这里改成大家自己的交叉编译器,注意arm-linux-后面应该紧跟回车,不能有其他任何字符
修改5
添加DM9000网卡设备支持.
[zhoupiaolong@localhost linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.cstatic struct platform_device *smdk2440_devices[] __initdata = {&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,+ &s3c_device_dm9000, /* 添加DM9000网卡的设备,告诉Linux内核现在有这个硬件连上来了 */};```
[zhoupiaolong@localhost linux-3.0]$ vim arch/arm/plat-s3c24xx/devs.c //在该C文件中定义结构体变量 s3c_device_dm9000
… … …
EXPORT_SYMBOL(s3c_device_iis);
+#ifdef CONFIG_DM9000 /* DM9000 network device support add by zhoupiaolong 2017.11.07*/
+#include
```[zhoupiaolong@localhost linux-3.0]$ vim arch/arm/plat-samsung/include/plat/devs.h //在该头文件中导出s3c_device_dm9000的声明extern struct platform_device s3c_device_hsmmc1;extern struct platform_device s3c_device_hsmmc2;extern struct platform_device s3c_device_hsmmc3;extern struct platform_device s3c_device_cfcon;+extern struct platform_device s3c_device_dm9000; /* 声明devs.c中定义的结构体变量s3c_device_dm9000 */extern struct platform_device s3c_device_spi0;
[zhoupiaolong@localhost linux-3.0]$ vim drivers/net/dm9000.c //修改dm9000.c的驱动代码,添加中断的初始化... ... ...static intdm9000_open(struct net_device *dev){board_info_t *db = netdev_priv(dev);- unsigned long irqflags = db->irq_res->flags & IRQF_TRIGGER_MASK;+ unsigned long irqflags = (db->irq_res->flags|IRQ_TYPE_EDGE_RISING) & IRQF_TRIGGER_MASK;++ irq_set_irq_type(dev->irq, IRQ_TYPE_EDGE_RISING);if (netif_msg_ifup(db))dev_dbg(db->dev, "enabling %s\n", dev->name);... ... ...
二、内核配置和编译
Linux的源码编译系统三兄弟的介绍
- Kconfig:一个文本形式的文件,存在内核源码中的每一个文件夹下,内核配置命令make menuconfig读取相应的Konfig文件生成菜单界面;
- .config:隐藏文件存放在内核源码顶层目录中,make menuconfig命令配置的结果,里面的每个选项用来指导Makefile哪些C文件需要编译,哪
些不需要编译; - Makefile:一个文本形式的文件,存在内核源码中的每一个文件夹下,用来控制编译该目录下的源码编译;
通过配置三兄弟得到编译后的fl2440_uimage(含根文件系统,之前的忘记copy一份所以一鼓作气做到后面会含根文件系统):
wget https://gitee.com/kansnow/Linux-fl2400ZuiXiaoXiTongYiZhi/blob/master/linuxroms-s3c2440.bin
- FL2440 Linux-3.0最小系统移植
- FL2440 Linux-3.0内核最小系统移植
- fl2440最小系统移植
- fl2440内核移植(一)——最小系统
- fl2440最小系统的移植遇到的问题
- FL2440移植linux-3.0全过程(3)制作initramfs最小文件系统
- FL2440移植内核Linux-3.0过程。
- fl2440内核移植过程Linux-3.0
- FL2440开发板移植linux-3.0.10
- FL2440移植Linux内核
- linux fl2440 kernel 移植
- 基于fl2440内核linux-3.0移植----触摸屏移植
- FL2440--YAFFS2系统移植(一)
- FL2440移植linux-3.0全过程(1)内核启动
- FL2440移植linux-3.0全过程(2) make menuconfig
- 内核linux-3.0移植到fl2440-----添加DM9000网卡驱动
- fl2440内核linux-3.0移植-----添加SD卡支持
- fl2440内核linux-3.0移植-----添加led驱动
- java三大特性
- nginx利用第三方模块nginx_upstream_check_module来检查后端服务器的健康情况
- SteamVR 插件脚本详解
- 嵌套循环
- VS 2010 如何显示行号 图文
- FL2440 Linux-3.0最小系统移植
- JVM常用内存参数配置
- [python] LDA处理文档主题分布代码入门笔记
- 生产批量检查web url并通过手机邮件报警案例
- 6.1 创建"Hello World"图形用户界面
- 99乘法表
- window平台搭建react-native环境
- 创建类Student和对象
- Mac OS安装RabbitMQ