移植linux3.7到nuc900系列开发板遇到的问题
通过移植学习linux新版本内核,大概了解一下内核变化。
记录一下移植过程中遇到的问题或值得注意的地方。
1,添加一款arm9芯片的支持
首先修改\arch\arm\tools\mach-types文件
添加一行
w90p950evb MACH_W90P950EVB W90P950EVB
同目录下的脚本文件在编译内核时会根据该文件生成
\include\generated\mach-types.h
define MACH_TYPE_W90P950EVB 1923
#ifdef CONFIG_MACH_W90P950EVB
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_W90P950EVB
# endif
# define machine_is_w90p950evb() (machine_arch_type == MACH_TYPE_W90P950EVB)
#else
# define machine_is_w90p950evb() (0)
#endif
如果配置内核的时候打开了CONFIG_MACH_W90P950EVB,
machine_arch_type就等于上面定义的宏 1923。
系统启动时,在/arch/arm/kernel/setup.c中
void __init setup_arch(char **cmdline_p)
{
struct machine_desc *mdesc; setup_processor();
mdesc = setup_machine_fdt(__atags_pointer);
if (!mdesc)
mdesc = setup_machine_tags(__atags_pointer, machine_arch_type);
machine_desc = mdesc;
machine_name = mdesc->name;
......
调用
setup_machine_fdt(__atags_pointer);
该函数bootloader传过来相关参数,匹配machine type。 如果没传过来参数,调用
setup_machine_tags(__atags_pointer, machine_arch_type);
用1923来匹配,与之匹配的是用MACHINE_START初始化的结构体,在内核中搜索MACHINE_START……
MACHINE_START(W90P950EVB, "W90P950EVB")
第一个参数W90P950EVB通过宏会转换成MACH_TYPE_W90P950EVB,函数通过比较这个值和machine_arch_type进行匹配。
MACHINE_START宏网络上有详细分析,大致就是初始化了struct machine_desc结构体并放到相应的段.
值得注意的是struct machine_desc结构体有一定的变化,
unsigned int phys_io; /* start of physical io */
unsigned int io_pg_offst; /* byte offset for io */
移除,
unsigned long boot_params; /* tagged list */
变成了
unsigned long atag_offset; /* tagged list (relative) */
变换关系
boot_params=sdram物理地址+atag_offset,即地址变成了偏移.像nuc900系列,sdram地址0x00000000这两个值就相等.
这个值指示了bootloader传来的参数存放位置。
编译期间遇到问题:
warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL'
加头文件 include<linux/export.h>
warning: type defaults to 'int' in declaration of 'DECLARE_MUTEX'
从linux2.6.37 DECLARE_MUTEX 已从内核移除
可用DEFINE_SEMAPHORE 替换
error: 'PAGE_SHIFT' undeclared here (not in a function)
加头文件
#include<asm/page.h>
移植linux3.7到nuc900系列开发板遇到的问题的更多相关文章
- Linux学习 :移植linux-3.4.83到JZ2440开发板
一.编译环境搭建: 1.linux源码下载:https://www.kernel.org/ (最新) https://mirrors.edge.kernel.org/pub/linux/kernel ...
- 【转载】如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结
[好文章值得分享,摘自作者:jesse] 来源:www.armjishu.com作者:jesse转载请注明出处 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM ...
- 2019年最受欢迎IMX6系列开发板,资料全开源,助力产品研发不在话下
迅为IMX6开发板: Android4.4系统 Linux + Qt5.7系统 Ubuntu12.04系统 部分真实案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 板载:4G全网 ...
- Linux学习 :移植U-boot_2012.04.01到JZ2440开发板
一.下载U-boot源码:ftp://ftp.denx.de/pub/u-boot/ 二.uboot的启动过程: 部分硬件初始化——>加载完整uboot到RAM——>跳转到第二阶段入口开始 ...
- 移植opencv2.4.9到itop4412开发板
OpenCV是眼下开源项目中最著名的基于机器视觉方向的图像处理的开发包,眼下已经有被移植到嵌入式Linux环境上. 本文介绍了OpenCV交叉编译的基本步骤. 在opencv交叉编译之前要先进行依赖库 ...
- stm32 nucleo系列开发板的接口
1. 首先说的是 Arduino接口,所有的nucleo系列都支持这个接口,而且像F767这种尺寸长的板子也有的,不过是双排排针,其实就是外侧也是 Arduino接口 2. 板子接上电脑之后有个串口
- Linux学习 :移植linux-4.7.4到JZ2440开发板
一.编译环境搭建: 1.linux源码下载:https://www.kernel.org/2.安装交叉编译工具链: ①手动下载配置工具链: (1):解压 arm-linux-gcc-3.4.1.tar ...
- rt3070无线网卡移植到开发板
Rt3070无线网卡AP功能移植到GEC210一.平台开发板:GEC210 无线网卡:RT3070主机:VMWare--Ubuntu 10.04 LTS内核版本:linux-2.6.35.7编译器:a ...
- 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)
目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for w ...
随机推荐
- CAD控件:梦想CAD控件功能更新 清除图上的所有高亮实体
1,修正得组里面的实体,把删除实体也返回的错误 2,修正代理实体改不了颜色问题. 3,修正捕捉块插入点,有时会跑到很远的位置问题. 4.MxDrawChange类增加ToBlockRefe ...
- 梦想CAD控件关于曲线问题
IMxDrawCurve 接口 控件中的曲线接口,实现了曲线的相关操作,如求曲线的长度,最近点,面积,曲线上任一点在曲线上的长度 切向方向,曲线交点,坐标变换,打断,偏移,离散等功能. 一.返回曲线组 ...
- (1) GoJS入门
GoJS的官方下载,若下载失败,可尝试通过我的个人网盘分享下载. GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地 ...
- 洛谷——P2007 魔方
P2007 魔方 常神牛家的魔方都是3*3*3的三阶魔方,大家都见过. 模拟即可: #include<iostream> #include<cstdio> #include&l ...
- Linux学习笔记(二) 文件管理
了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...
- Python面向对象之面向对象基本概念
面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果:函数不仅能执行,还能返回结果. 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实 ...
- Andrew and Chemistry(树的同构)
Andrew and Chemistry(树的同构) 题链 将一棵树转化为最小表示法,将此时的树哈希一下,同时用map进行标记,就可以判断树是否存在同构 #include <map> #i ...
- 一、ECharts简介
ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11 ...
- POJ 1026 置换群的k次幂问题
题目大意: 给定了一组对应关系,经过k次幂后,得到新的对应关系b[i],然后将给定的字符串上的第i位字符放置到b[i]的位置上, 如果字符串长度不足n就用空格补足,这里的是空格,也就是str[i] = ...
- 线段树题集 (cf版)
lazy区间修改 : http://acm.hdu.edu.cn/showproblem.php?pid=4902 (hdu4902) http://acm.hdu.edu.cn/showpr ...