热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux-2.6.x在S3C44B0X上的移植总结

需要准备的软件包:系统包:uClinux-dist-20040408.tar.gz下载地址:http:www.uclinux.org
需要准备的软件包 :
系统包: uClinux-dist-20040408.tar.gz
下载地址: http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20040408.tar.gz
内核包: linux-2.6.9.tar.bz2
下载地址: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2
补丁包 1 linux-2.6.9-uc0.patch.gz
下载地址: http://www.uclinux.org/pub/uClinux/uClinux-2.6.x/linux-2.6.9-uc0.patch.gz
补丁包 2 linux-2.6.9-uc0-hsc0.patch.gz
下载地址: http://opensrc.sec.samsung.com/download/linux-2.6.9-uc0-hsc0.patch.gz
1 解压uClinux-dist-20040408.tar.gz
[root@localhost opt]# tar -zxvf uClinux-dist-20040408.tar.gz
解压后在当前目录下生成uClinux-dist目录。
2 采用2.6.9内核
[root@localhost opt]#cp linux-2.6.9.tar.bz2 uClinux-dist/
[root@localhost opt]#cp linux-2.6.9-uc0.patch.gz uClinux-dist/
[root@localhost opt]#cp linux-2.6.9-uc0-hsc0.patch.gz uClinux-dist/
 
uClinux-dist-20040408 包中的 2.6.x 内核是 2.6.2 的,我用 2.6.9 替换掉。
Linux-2.6.9.tar.bz2 是内核包, linux-2.6.9-uc0.patch.gz 是对针对 no mmu 的内核补丁, linux-2.6.9-uc0-hsc0.patch.gz 是针对 CPU 的内核补丁。
 
[root@localhost uClinux-dist]#tar –jxvf linux-2.6.9.tar.bz2
解压后生成 linux-2.6.9 目录。
[root@localhost uClinux-dist]#mv linux-2.6.9-uc0.patch.gz linux-2.6.9/
[root@localhost uClinux-dist]#mv linux-2.6.9-uc0-hsc0.patch.gz linux-2.6.9/
[root@localhost uClinux-dist]#cd linux-2.6.9
[root@localhost linux-2.6.9]#gzip –dc linux-2.6.9-uc0.patch.gz | patch –p1
[root@localhost linux-2.6.9]#gzip –dc linux-2.6.9-uc0-hsc0.patch.gz | patch –p1
[root@localhost linux-2.6.9]#cd ..
[root@localhost uClinux-dist]#rm –rf linux-2.6.x
[root@localhost uClinux-dist]#mv linux2.6.9 linux-2.6.x
3创建uClinux-dist/vendors/Samsung/44B0
[root@localhost uClinux-dist]#cd vendors/Samsung/
[root@localhost Samsung]#mkdir 44B0
[root@localhost Samsung]#cp 4510B/* 44B0/
[root@localhost Samsung]#cd ../../../
[root@localhost Samsung]#cp linux-2.6.x/arch/armnommu/config/s3c44b0x_defconfig
vendors/Samsung/44B0/config.linux-2.6.x
4 修改配置信息
[root@localhost uClinux-dist]#cd vendors/Samsung/44B0
修改 config.linux-2.6.x
#
# System Type
#
DRAM_BASE=0x0C000000
DRAM_SIZE=0x00800000
FLASH_MEM_BASE=0x01000000
FLASH_SIZE=0x00200000
CONFIG_ARM_CLK=64000000              //64M 时钟
 
#
# S3C44B0X Board Driver Options
#
CONFIG_SERIAL_S3C44B0X=y
CONFIG_SERIAL_S3C44B0X_COnSOLE=y
CONFIG_ETH_RTL8019AS=n
先屏蔽网卡驱动
 
修改 config.vendor-2.6.x
[root@localhost 44B0]#cp config.vendor-2.4.x config.vendor-2.6.x
修改部分
CONFIG_USER_BUSYBOX_KILLALL=n
CONFIG_USER_LOGIN_LOGIN=n
CONFIG_USER_OLD_PASSWORDS=n
CONFIG_USER_BUSYBOX_BUSYBOX=n
修改 config.arch
CONSOLE_BAUD_RATE = 57600
通信波特率改为与 U-BOOT 同样
修改 Makefile  rc
uClinux-dist//vendors/Samsung/44B0/Makefile 修改后如下:
/---------------------------------------------------------------------------------------------------------------------------
ROMFSIMG = $(IMAGEDIR)/romfs.img
ROMIMAGE = $(IMAGEDIR)/image.rom
RAMIMAGE = $(IMAGEDIR)/image.ram
 
...
 
echo "$(VERSIONSTR) -- " `date` > $(ROMFSDIR)/etc/version
 cp $(ROOTDIR)/user/ramimage/ramfs2048.img /
  $(ROOTDIR)/romfs/etc/ramfs2048.img
 
image:
  [ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)
  genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
 $(CROSS_COMPILE)ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o /
  -b binary $(ROMFSIMG)
  $(CROSS_COMPILE)objcopy -O binary -R .note -R .comment /
  -S $(ROOTDIR)/$(LINUXDIR)/linux $(RAMIMAGE)
  cp $(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage /
  $(ROMIMAGE)
 
# $(CROSS_COMPILE)objcopy -O binary --remove-section=.romvec /
  --remove-section=.text --remove-section=.ramvec /
  --remove-section=.init /
  --remove-section=.bss --remove-section=.eram /
  $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/linux.data
# $(CROSS_COMPILE)objcopy -O binary --remove-section=.ramvec /
  --remove-section=.bss --remove-section=.data /
  --remove-section=.eram /
  --set-section-flags=.romvec=CONTENTS,ALLOC,LOAD,READONLY,CODE /
  $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/linux.text
# cat $(IMAGEDIR)/linux.text $(IMAGEDIR)/linux.data $(ROMFSIMG) > $(IMAGE)
---------------------------------------------------------------------------------------------------------------------------/
uClinux-dist//vendors/Samsung/44B0/rc修改如下
/---------------------------------------------------------------------------------------------------------------------------
hostname Samsung
/bin/expand /etc/ramfs.img /dev/ram0
/bin/expand /etc/ramfs2048.img /dev/ram1
mount -t proc proc /proc
mount -t ext2 /dev/ram0 /var
mount -t ext2 /dev/ram1 /var
chmod 777 /ramdisk
mkdir /var/config
mkdir /var/tmp
mkdir /var/log
mkdir /var/run
mkdir /var/lock
mkdir /var/empty
ifconfig lo 127.0.0.1
route add -net 127.0.0.0 netmask 255.255.255.0 lo
ifconfig eth0 192.168.1.70 netmask 255.255.255.0 up
cat /etc/motd
---------------------------------------------------------------------------------------------------------------------------/
5 增加romfs
修改 linux-2.6.x/arch/armnommu/kernel/vmlinux.lds.S
*(.got)                  /* Global offset table             */
                     romfs_start = .;
                     romfs.o
                     romfs_end = .;
 
              _etext = .;              /* End of text section            */
修改 linux-2.6.x/arch/armnommu/kernel/setup.c
64 extern int _stext, _text, _etext, _edata, _end;
65 extern int romfs_start,romfs_end;
void __init setup_arch(char **cmdline_p)
{
683 char *from = default_command_line;
      
685 sprintf(default_command_line,"root=/dev/ram0 initrd=0x%08lx,%ldk keepinitrd",(unsigned long)&romfs_start,((unsigned long)&romfs_end-(unsigned long)&romfs_start)>>10);
修改 uClinux-dist/Makefile
TFTPDIR = /tftpboot 后添加
LINUXTARGET = bzImage
6 修改库文件
修改 uClibc/libc/sysdeps/linux/common/create_module.c
//#define __NR_create_module    127
改为
#define __NR_create_module    127
修改 uClibc/libc/sysdeps/linux/common/syscalls.c
//#define __NR_get_kernel_syms 130
改为
#define __NR_get_kernel_syms 130
修改 uClibc/include/bits/sigcontextinfo.h
注释掉
//#include
/******************************************************************************
以上库文件不修改会出现的错误
create_module.c: In function `__create_module':
create_module.c:37: `__NR_create_module' undeclared (first use in this function)
create_module.c:37: (Each undeclared identifier is reported only once
create_module.c:37: for each function it appears in.)
make[6]: *** [create_module.o] Error 1
make[4]: Leaving directory `/opt/uClinux-dist/uClibc/libc/sysdeps/linux/common/'
 
syscalls.c: In function `get_kernel_syms':
syscalls.c:1446: `__NR_get_kernel_syms' undeclared (first use in this function)
syscalls.c:1446: (Each undeclared identifier is reported only once
syscalls.c:1446: for each function it appears in.)
make[4]: Leaving directory `/opt/uClinux-dist/uClibc/libc/sysdeps/linux/common/'
 
In file included from signals.c:24:
/opt/uClinux-dist/lib/uClibc/include/bits/sigcontextinfo.h:21: linux/version.h: No such file or directory
make[4]: *** [signals.o] Error 1
make[4]: Leaving directory `/opt/uClinux-dist/uClibc/libpthread/linuxthreads'
******************************************************************************/
7 编译内核
[root@localhost opt]#make distclean
[root@localhost opt]#make menuconfig
选择 CPU
Vendor:Samsung
Product:44B0
选择内核
Kernel Version:linux-2.4.x
Libc Version:uClibc
Customize kernel setting:y
Customize vendor/user setting:y
保存设置
退出
退出后进行参数设置,参数的设置选择会自动按照 vendors/Samsung/44B0 里的配置文件来选择。再配置过程会出现如下需要手动选择的:
*
* System Type
*
ARM system type
  1. Atmel AT91xxx (ARCH_ATMEL)
  2. Samsung S3C3410X (ARCH_S3C3410)
  3. ESPD 4510B / Samsung S3C4510B (ARCH_ESPD_4510B)
> 4. Samsung S3C44B0 (ARCH_S3C44B0)
  5. Samsung S5C7375 (ARCH_S5C7375)
  6. Samsung S3C24A0 (ARCH_S3C24A0) (NEW)
choice[1-6]: 4
 
boa (CONFIG_USER_BOA_SRC_BOA) [N/y/?] (NEW) n
配置完毕后会弹出 kernel setting vendor/user setting 的设置窗口,直接按 exit 保存即可。
make dep
       make lib_only
       make user_only
       make romfs
       make image
       make linux
       make image
       make
编译通过后会在 uClinux-dist/images 里产生三个文件:
image.ram   image.rom      romfs.img
image.ram 即是可以移植的。
 
移植后出现 :
Error:unable to open an initial console
未解决
 

推荐阅读
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.032generic/bulid: 没有那个文件或目录。 停止。”...
    编写一个简单的内核驱动模块1staticinthello_init()2{3printk(“hello,Iaminkernelnow\n”);4return0;5}6voidadd ... [详细]
  • 每当我尝试使用NEON16位浮点内在函数时都会收到此错误。我没有遇到其他数据类型内在函数的任何问题。是否可以在Android上使用NEON16位浮点内在函数? ... [详细]
  • 201720181 20155315 《信息安全系统设计基础》实验四 外设驱动程序设计
    实验内容学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.p ... [详细]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼binsh:1:usrlocalcuda-9.1:PermissiondeniedMakefile:88:recipefortargeto ... [详细]
  • 前期工作准备MacOSX+Ubuntu14.04虚拟机安装交叉编译工具适合树莓派的Linux内核器材准备树莓派外接显示屏实验步骤1、寻找、下载Linux实验板卡 ... [详细]
  • 1. Makesureyouhaveimake.(SeetheBUILDNOTESfileifyouwanttotrybuildingwi ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • 1.      准备工作: 程序:MinGW-3.1.0-1.exe     windows下的gcc,编译c语言的工具下载地址: http:umn.dl.sourceforge. ... [详细]
  • 操作系统RetHat9.0,存储设备华为3comEX1000在linux上建立能够识别盘阵的方法有三种1、HBA卡;2、TOE卡;3、is ... [详细]
author-avatar
摇身一变鄙人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有