linux2.6.32移植概要总结

发布者:cloudsousou6最新更新时间:2021-08-09 来源: eefocus关键字:linux2  6  移植 手机看文章 扫描二维码
随时随地手机看文章

(一)修改机器码


打开mach-test2440.c, 找到最后的MACHINE_START宏,


例如MACHINE_START(TEST2440, "TEST2440")这一行,


第二个参数无所谓,重要的是第一个参数,在gcc编译这个mach-test2440.c的时候,会把TEST2440匹配到/include/asm-arm/mach-types.h中的"#define MACH_TYPE_TEST2440 1999"这里, 如果在mach-types.h中找不到MACH_TYPE_TEST2440, gcc编译mach-test2440.c则报错;

还有,/include/asm-arm/mach-types.h是每次make zImage过程中, 由arch/arm/tools/mach-types文件生成的,

总结,修改机器码,涉及内核代码的三个地方,MACHINE_START宏,mach-types.h,mach-types,初启动时,bootloader向内核传递一个机器码,因为这里用的是友善的supervivi,所以bl传递的机器码是1999。


(二)修改晶振频率


还是文件mach-test2440.c, 找到static void __init smdk2440_map_io(void)函数中, 把其中的 16934400改为12000000, 晶振频率错误可能引起串口打印乱码,


(三)修改SMDK2440对应的函数名称


在新创建的mach-test2440.c中,把所有的smdk2440字样的函数改成test2440, 避免名称冲突.


vi mach-test2440.c


vi下输入:%s/smdk2440/test2440/g


(四)修改对应的Kconfig和Makefile


进入/arch/arm/mach-s3c2440目录, 编辑Makefile和Kconfig:

(1)makefile最后增加一行: obj-$(CONFIG_MACH_TEST2440) += mach-test2440.o

(2)kconfig最后一行endmenu之前增加:

    config MACH_TEST2440

        bool "TEST2440 development board By dos5gw"

        select CPU_S3C2440

        select S3C2440_XTAL_12000000

        select EEPROM_AT24

        select S3C_DEV_NAND

        select S3C_DEV_USB_HOST

        help

          Say Y here to select support for the TEST2440.

   这里可以仿照SMDK2440和MINI2440的kconfig部分


(五)初次编译测试


make s3c2410_defconfig, 载入2410的默认配置,

make menuconfig,  在system type->S3C2440 Machines选中刚才的MACH_TEST2440,并去掉其他s3c24xx处理器的支持,(暂时只剪裁这一点吧,上次因为剪裁太多,出问题了)

写入nand flash, 开机测试. 根据串口屏显查看有无进入start_kernel()函数,


(六)yaffs2补丁


由于根分区采用yaffs2格式, 还要打yaffs2补丁, 前面已经写过, 略.


(七)修改nand flash分区,


在mach-test2440.c, 中增加nand flash分区的相关代码,


mach-test2440.c中定义的platform_device,与common-smdk.c中定义的platform_device不重复,

mach-smdk2440.c中定义的platform_device,与common-smdk.c中定义的platform_device重复,

比如,mach-smdk2440.c和common-smdk.c两个文件都对同一个s3c_device_nand(platform_device类型)进行platform_add_devices()操作,则在make zImage会报错不能创建相同的设备.


(八)添加其他驱动


包括网卡,RTC,LCD背光,LCD显示,ADC,触摸屏,usb外设,SD卡,声卡驱动.


等根据板载外设, 在mach-test2440.c文件内, 每个外设都要对应创建platform_device类型的static变量,  


(注意1)所有2440平台中共用的platform_device,比如s3c_device_lcd,s3c_device_usb,s3c_device_nand等,这些使用已有的定义.

  除此之外的外设需要手动注册成platform_device, 根据板载设备的实际情况,比如板子上搭载了DM900网卡/UDA1341声卡(这两个设备在mach-mini2440.c中都有定义), 但在2440通用平台中没有定义,所以要自己定义网卡的paltform_device;


创建的platform_device变量,添加进static struct platform_device *test2440_devices[] __initdata中;


然后再_machine_init()中对添加备结构体数组.


static void __init test2440_machine_init(void){

      platform_add_devices(test2440_devices, ARRAY_SIZE(test2440_devices));

 }//把platform_device结构体数组进行add_device()操作


对于mach-test2440.c文件内定义的函数/结构体, 与其他平台对应的文件都是一致的, 比如mach-mini2440,mach-at2440evb.c


定义的函数都要注册进MACHINE_START 宏中,


(九)调整Kernel Configure中的参数


   (1)第八步中驱动文件对应的选项,

   (2)启动参数: boot option -> cmd line改为:noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200, 要与bl传递的参数一致


   (3)把不必要的选项去掉, 减小内核映像体积.


之后就是文件系统的制作了

关键字:linux2  6  移植 引用地址:linux2.6.32移植概要总结

上一篇:嵌入式工程师到底要不要学习ARM汇编指令?
下一篇:linux 2.6.32 在arm9(s3c2440)平台的移植 - LCD背光驱动

推荐阅读最新更新时间:2024-11-09 22:14

STM32F4 ADC之内部温度传感器
测量芯片周围的环境温度用。这个温度传感器输出的电压与温度成一定比例,获取温度基本就是用ADC测量这个电压。 在芯片内部,温度传感器与ADC1的CH16相连。当不使用改传感器时,可将其设置为PowerDown模式以省电。 主要特性: 测温范围:-45~+125摄氏度 测温精度:±1.5摄氏度 使用步骤: 1、选择ADC1 CH16作为ADC的输入 2、设置采样时间 3、设置ADC1寄存器ADC_CCR的TSVREFE位,将温度传感器从PowerDown模式唤醒。 4、开始ADC转换 5、读取转换值Value并换算成电压Vsense,Vsense = Value×3300/4096 (mV) 6、计算温度。 温度计算公式:Temp =
[单片机]
基于STM32F107的图像采集传输系统设计
无线传感网络是由大量具有通信和计算能力、廉价微型的传感器节点通过自组织的无线通信方式,相互传递信息,协同地完成特定功能的智能网络,在环境监测、安全监控、智能家居等领域有着广大的应用空间。通过图像信息的分析可以精确、直观地对目标环境实施监测。本系统通过STM32F107对摄像头的时序控制,以及ZigBee模块的使用,实现了图像信息在无线传感网络的实时采集和传输。 1 硬件设计方案 1.1 硬件系统结构 系统硬件部分主要由STM32F107、摄像头OV7670、帧缓存器及ZigBee模块及其他外设组成。其中,LCD接口主要用于图像显示,便于图像采集程序的调试,SRAM用于系统的数据存储器,Flash用于系统的程序存储器。系统整体框图
[单片机]
基于STM<font color='red'>32</font>F107的图像采集传输系统设计
STM32-(05):GPIO原理与操作
简单分析:红色框主要是输出电路(O),蓝色框主要是输入电路(I);关于输出电路,可以通过写位设置/清除寄存器来改变输出数据寄存器,或者直接读写输出数据寄存器,有这两种方式,继而通过I/O端口输出。如果打开了复用功能,就走复用的通道,输出控制就是一个锁存器。若寄存器写入1,输出控制的上方输出1,则CMOS管P-MOS导通,CMOS管N-MOS不导通,输出高电平,若寄存器写入0,输出低电平。关于输入电路,I/O进来有两个保护二极管,防止电压过高,再进入,有两个电阻,上拉和下拉,当不拉时为浮空输入,一般用于模拟输入,经过施密特触发器,如果用作GPIO口,将值写入寄存器,如果用作复用,走复用通道。 GPIO功能描述 端口配置表+
[单片机]
STM<font color='red'>32</font>-(05):GPIO原理与操作
6)MSP430的比较器A
比较器A是一个实现模拟电压比较的外围模块~~~~~~~~~~~~ 比较器A的主要功能是指出两个输入电压CA0和CA1的大小关系,然后设置输出信号CAOUT的值。如果CA0 CA1 则:CAOUT=1,否则CAOUT=0。 参与比较的两个电压CA0和CA1可以是外部或者内部基准电压。任何组合都是可能的。 比较器结构 比较器A一共有3个寄存器 CACTL1,CACTL2和CAPD 其中CAEX 交换比较器的输入端 CARSEL 选择内部参考源加到比较器A的+端或-,跟CAEX的选择有关,具体参照数据手册。 CAREF1,CAREF0 参考电平发生器控制 0:关闭 1:选择0.25Vcc为参考电平
[单片机]
基于Linux的kfifo移植到STM32(支持os的互斥访问)
关于kfifo kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现;它提供一个无边界的字节流服务,最重要的一点是,它使用并行无锁编程技术,即当它用于只有一个入队线程和一个出队线程的场情时,两个线程可以并发操作,而不需要任何加锁行为,就可以保证kfifo的线程安全。 具体什么是环形缓冲区,请看我以前的文章 说明 关于kfifo的相关概念我不会介绍,有兴趣可以看他的相关文档,我只将其实现过程移植重写,移植到适用stm32开发板上,并且按照我个人习惯重新命名,RingBuff- 意为环形缓冲区 RingBuff_t 环形缓冲区的结构体成员变量,具体含义看注释。 buff
[单片机]
Linux设备树学习(三)uboot和Linux中的设备树移植
一、uboot对fdt(flattened device tree)的支持 在xxx_defconfig中加入 #define CONFIG_OF_LIBFDT 1 /* Device Tree support */ 重新编译u-boot,就可以实现对device tree的支持。 1、在uboot命令行输入: fdt 有类似显示证明支持device tree: dt - flattened device tree utility commands Usage: fdt addr addr - Set the fdt location to addr fdt move fdt newaddr leng
[单片机]
意法半导体新系列MCU STM32H5提升下一代智能应用的性能和安全性
意法半导体新系列MCU STM32H5提升下一代智能应用的性能和安全性 • 采用Arm Cortex-M33嵌入式微控制器内核,运行频率250MHz • 内置 STM32Trust TEE Secure Manager,让安全功能既强大又简单 2023年3月16日,中国 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)发布了STM32H5系列高性能微控制器(MCU)。 新系列产品引入STM32Trust TEE Security Manager安全技术,为智能物联网设备带来先进的安全功能。 新推出的STM32H5 MCU系列搭载Arm® 的C
[单片机]
意法半导体新系列MCU STM<font color='red'>32</font>H5提升下一代智能应用的性能和安全性
6个LED驱动电路图
6个LED驱动电路图 690)this.width=690;if(this.height>690)this.height=690;" height=338 resized="1">
[电源管理]
<font color='red'>6</font>个LED驱动电路图
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved