TQ2440之移植linux 内核
ubuntu: 18.04
busybox: busybox-1.20.2.tar
修改时钟
linux-4.9.84\arch\arm\mach-s3c24xx\mach-smdk2440.c
// s3c2440_init_clocks(16934400);
s3c2440_init_clocks(12000000);
拷贝配置
linux-4.9.84$ cp arch/arm/configs/s3c2410_defconfig ./
linux-4.9.84$ cp s3c2410_defconfig .config
修改机械码
linux-4.9.84\arch\arm\tools\mach-types
smdk2410 ARCH_SMDK2410 SMDK2410 193
smdk2440 ARCH_SMDK2440 SMDK2440 168
设置网卡参数,
linux-4.9.84\arch\arm\mach-s3c24xx\mach-smdk2440.c
#include <linux/dm9000.h>#if 1
// new add
static struct resource s3c_dm9k_resource[] = {[0] = {.start = S3C2410_CS4,.end = S3C2410_CS4 + 3,.flags = IORESOURCE_MEM,},[1] = {.start = S3C2410_CS4 + 4,.end = S3C2410_CS4 + 4 + 3,.flags = IORESOURCE_MEM,},[2] = {.start = IRQ_EINT7,.end = IRQ_EINT7,.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,}};static struct dm9000_plat_data s3c_dm9k_platdata = {.flags = DM9000_PLATF_16BITONLY,};struct platform_device s3c_device_dm9000 = {.name = "dm9000",.id = 0,.num_resources = ARRAY_SIZE(s3c_dm9k_resource),.resource = s3c_dm9k_resource,.dev = {.platform_data = &s3c_dm9k_platdata,}};
#endifstatic struct platform_device *smdk2440_devices[] __initdata = {&s3c_device_ohci,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_dm9000,
};
下载 yaffs2
ym@ym:~/work/tq2440/lesson02$ git clone git://www.aleph1.co.uk/yaffs2
ym@ym:~/work/tq2440/lesson02$ cd yaffs2/
ym@ym:~/work/tq2440/lesson02/yaffs2$ ./patch-ker.sh c m ../linux-4.9.84
Updating ../linux-4.9.84/fs/Kconfig
Updating ../linux-4.9.84/fs/Makefile
make menuconfig
Device Drivers --->Input device support --->[*] Touchscreens ---><*> Samsung S3C2410/generic touchscreen input driver # 开启触摸屏支持[*] Watchdog Timer Support --->< > S3C2410 Watchdog # 关闭看门狗,要不然系统会一直重启Graphics support --->[*] Bootup logo --->[*] Standard 16-color Linux logo # 选中该项,取消其他项<*> Memory Technology Device (MTD) support --->< > FTL (Flash Translation Layer) support # 取消选中,要不然会出现警告:ftl_cs: FTL header not found< > NFTL (NAND Flash Translation Layer) support # 取消选中,要不然会出现警告:ftl_cs: < > INFTL (Inverse NAND Flash Translation Layer) support # 取消选中,要不然会出现警告:ftl_cs: <*> NAND Device Support ---><*> NAND Flash support for Samsung S3C SoCs[*] Samsung S3C NAND Hardware ECC # 开启NAND的硬件ECC校验File systems ---> [*] Miscellaneous filesystems ---><*> yaffs2 file system support # 开启yaffs2文件系统支持
make uImage
安装 sudo apt-get install u-boot-tools
使用gcc4.3.3 和 busybox1.6编译出来的根文件系统可以在ubuntu 上nfs挂载,但是在window 挂载无法工作。
使用gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf 和 busybox1.33.1编译出来的根文件系统无法工作
定位uboot 和kernel debug 问题
打开在内核中配置CONFIG_DEBUG_USER=y,并在uboot 启动参数bootargs 中添加 user_debug=31,打开全部调试信息,例如 setenv bootargs console=ttySAC0,115200 user_debug=31 saveenv
错误是未定义指令
linux-4.9.84\arch\arm\kernel\traps.c
#ifdef CONFIG_DEBUG_USERif (user_debug & UDBG_UNDEFINED) {pr_info("%s (%d): undefined instruction: pc=%p\n",current->comm, task_pid_nr(current), pc);__show_regs(regs);dump_instr(KERN_INFO, regs);}
#endif
使用反汇编工具将rootfs下可执行文件linuxc 进行反汇编
ym@ym:~/work/tq2440/lesson02/rootfs$ arm-linux-gnueabihf-objdump -D -S linuxrc > tes
找到错误指令 000f30a4
f30a4: e300c000 movw ip, #0
看不出指令有什么问题。。
更换arm gcc为 4.3.3版本,重新制作根文件系统,可用。
arm-gcc 必须定制化,自己制作 4.9.1
修改IIC
arch\arm\mach-s3c24xx\mach-mini2440.c
/** I2C devices*/
static struct at24_platform_data at24c02 = {.byte_len = SZ_2K / 8, /* 2Kbits / 8 = 256bytes */.page_size = 8, /* at24c02 page size = 8 */.flags = 0,
};static struct i2c_board_info mini2440_i2c_devs[] __initdata = {{I2C_BOARD_INFO("24c02", 0x50),.platform_data = &at24c02,},
};
添加蜂鸣器
/* BEEP */static struct s3c24xx_led_platdata mini2440_beep_pdata = {.name = "beep",.gpio = S3C2410_GPB(0),.flags = S3C24XX_LEDF_TRISTATE,
};static struct platform_device mini2440_beep = {.name = "s3c24xx_led",.id = 5,.dev = {.platform_data = &mini2440_beep_pdata,},
};
TQ2440之移植linux 内核相关推荐
- Linux内核移植漫谈——你不是第一个想移植Linux内核的人
Jack:在读大学的时候我想过移植Linux操作系统. 我:现在呢? Jack:我还是想移植Linux操作系统.你教我移植吧. 我:你知道什么是"Linux内核移植"吗? Jack ...
- linux内核移植开发板,mini2440学习之(一)-------移植linux内核
请 登录 后使用快捷导航 没有帐号?注册 阅 4622|回 2 最后登录2013-8-22 在线时间22 小时 威望2878分 芯积分608分(兑换) E金币好友 发表于2009-9-22 15:02 ...
- 为AM335x移植Linux内核主线代码——了解dts
问题一:以前的Linux Kernel如何描述硬件,现在又如何描述呢? 在以前的内核版本中: 1)内核包含了对硬件的全部描述: 2)bootloader会加载一个二进制的内核镜像,并执行它,比如uIm ...
- linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx
Linux内核移植步骤_添加DM9000网卡驱动(设备树) Linux内核移植步骤2015年05月13日星期三上午 11:05往设备树中添加网卡驱动:1.选平台,指定交叉编译工具链:(1).在Make ...
- linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx
linux内核移植步骤添加dm9000网卡驱动(设备树).docx LINUX内核移植步骤2015年05月13日星期三上午1105往设备树中添加网卡驱动1.选平台,指定交叉编译工具链1.在MAKEFI ...
- 第二部分 s3c2440 移植linux内核 添加网卡支持 yaffs2文件系统支持
三.内核的移植 说明:针对的是百问网的jz2440 gcc:4.9.1 1.移植内核 首先,下载源码包:https://www.kernel.org/ 现在时间为2014年12月20日其主界面截图为: ...
- zedboard移植linux内核,[干货]手把手教你用Zedboard学习Linux移植和驱动开发
作者:殷建飞 本文是昨天发的文章<龙芯杯CPU设计竞赛与ZYNQ设计流程介绍>接续部分.重点介绍传统方式的Linux移植和Xilinx的Petalinux的快速移植开发两种. 部分硬件设计 ...
- mini2440移植linux内核,mini2440的 linux内核移植
mini2440的linux内核移植 电脑主机系统:Ubuntu 9.04 mini2440开发板bootloader:supervivi 交叉编译器使用友善之臂提供的符合EABI标准的交叉编译器ar ...
- go移植linux内核书名叫啥,Go语言移植Linux内核数据结构hlist
hlist(哈希链表)可以通过相应的Hash算法,迅速找到相关的链表Head及节点. 在有些应用场景,比Go标准库提供的list(一种双向链表)更合适. 依照list.h中的源码,我实现了一个Go语言 ...
最新文章
- WinXP下At,Schtask和Eventtriggers命令实例(一)
- 百度云盘上传文件和下载文件慢的解决办法
- android+apk+修改+签名文件位置,Jenkins打包android应用时自动签名apk详解
- 【leetcode 968. 监控二叉树】解题报告
- vue学习笔记(三)
- RTT线程管理篇——rtt线程恢复
- 安装oracle失败,停止在76%
- mysql索引级别快慢_面试小点-MySQL 的两种索引方法如何提高查询速度
- Angular 响应式表单 patchValue和setValue
- mongoDB对没有字段的记录新增字段
- MSP430常见问题之开发工具类
- smali 添加资源
- 学校培训课程预约报名登记收缴费用小程序开发制作
- 未来教育计算机书,未来教育计算机二级
- JDK8之后下一个版本使用什么及JDK版本的简单介绍
- SparkSQL Analyzed实例源码解析
- 超简单的scrapy实现ip动态代理与更换ip
- Kubernetes 节点弹性伸缩开源组件 Amazon Karpenter 实践:部署GPU推理应用
- 雾霾不散,课就不得不停?
- Hadoop-Hive常用,命令