Linux的移植与Linux驱动交叉编译环境搭建

发布者:SereneWanderer最新更新时间:2025-01-15 来源: cnblogs关键字:Linux  移植  驱动  交叉编译环境 手机看文章 扫描二维码
随时随地手机看文章

需要工具:

1.Linux内核源码包,可在http://www.kernel.org/pub/linux/kernel/中去下载自己需要的版本,我们这里我们使用的内核为 linux-3.0.8.tar。


2.需要挂载的芯片源码,这里使用三星的S5PV210为例,代码包为rootfs_fs210.tgz的一个压缩包


3.交叉工具链,toolchain-4.5.1-farsight.tar.bz2。


1.我们要移植配置Linux-3.0.8系统,这里我是直接在用户目录下使用Samba直接建立个共享文件夹的,在Windows中直接把想要需要的文件放在其中,然后在linux中操作文件。正如下图所示,将.bz2文件放在s5PV210文件下,并解压为一个linux-3.0.8的一个文件。解压:tar -xvf linux-3.0.8.tar.bz2,等待解压完成。

2.解压完成后我们进入到linux-3.0.8文件中,找到我们的Makefile文件,sudo vim makefile打开该文件,将我们要挂载的芯片进行填写ARCH ?= arm,CROSS_COMPILE ?= arm-none-linux-gnueabi-,修改完成后,保存退出即可。


3.为了实现我们能够挂载s5PV210芯片,我们需要对系统进行配置。执行语句 make s5pv210_defconfig 系统会默认给我们配置一些相应的设置。如下图所示即可。


4.对linux内核的裁剪,选择我们需要的功能,这样有利于我们进行驱动开发,也减少不必要的麻烦。


在Linux源码的根目录下,执行make menuconfig配置,界面如下图所示。

注意:

1.如果提示缺少ncurse 实行sudo apt-get install libncurses5-dev命令进行安装即可。


2.如果终端必修能够容下这个面板,要不然也会报错。


接下来就是我们对linux系统进行裁剪了,先说明,按空格键进行选中,[*]表示选中,上下左右键进行上下左右操作。

General setup --->
    [*] Configure standard kernel features (expert users) --->

System Type --->
    (0) S3C UART to use for low-level messages //这里面将01改为00,表示使用串口1进行信息输出

Kernel Features --->
    Memory split (3G/1G user/kernel split) --->   //选中常用的4G大小分配,3G的用户内存,1G的系统内存。

[*] Networking support --->
Networking options --->
    <*> Packet socket
    <*> Unix domain sockets
    [*] TCP/IP networking
        [*] IP: multicasting
        [*] IP: kernel level autoconfiguration
            [*] IP: BOOTP support

Device Drivers --->
    [*] Network device support --->
        [*] Ethernet (10 or 100Mbit) --->
            <*> DM9000 support

File systems --->
    [*] Network File Systems (NEW) --->
        <*> NFS client support
            [*] NFS client support for NFS version 3
                [*] NFS client support for the NFSv3 ACL protocol extension
        [*] Root file system on NFS

到此我们就将需要的linux剪辑完毕,退出保存即可。

 

5.移植网卡驱动

打开我们的文件 vi arch/arm/mach-s5pv210/mach-smdkv210.c
修改网卡的mac地址:
static struct dm9000_plat_data smdkv210_dm9000_platdata = {
  .flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
  .dev_addr = { 0x00, 0x09, 0xc0, 0xff, 0xec, 0x99 }, // 设置为座位号码
};

修改结构体数组smdkv210_dm9000_resources为:
static struct resource smdkv210_dm9000_resources[] = {
[0] = {
  .start = 0x88000000, //地址端口
  .end = 0x88000000 + 0x3,
  .flags = IORESOURCE_MEM,
},
[1] = {
  .start = 0x88000000 + 0x4, //数据端口
  .end = 0x88000000 + 0x4 + 0x3,
  .flags = IORESOURCE_MEM,
},
[2] = {
  .start = IRQ_EINT(10), //中断号
  .end = IRQ_EINT(10),
  .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
},
};

修改该函数

static void __init smdkv210_dm9000_init(void)
{
  /*时序配置:需要技术支持*/
  unsigned int tmp;
  gpio_request(S5PV210_MP01(1), 'nCS1');
  s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2));
  gpio_free(S5PV210_MP01(1));
  tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);
  __raw_writel(tmp, S5P_SROM_BC1);
  tmp = __raw_readl(S5P_SROM_BW);
  tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS1__SHIFT);
  tmp |= (1 << S5P_SROM_BW__NCS1__SHIFT);
  __raw_writel(tmp, S5P_SROM_BW);
}

6.编译内核

进入linux内核的源码根目录,执行如下命令:make -j2 zImage
farsight@ubuntu:~/s5pv210/linux-3.0.8$ cp -raf arch/arm/boot/zImage /tftpboot/

等待内核编译完成即可。(该编译有点久)


编译完成后执行 cp -raf arch/arm/boot/zImage /tftpboot/ ,将zImage cp到tftpboot中。

7.接下来是对我们需要交叉编译的工具包进行配置,该文件我放在系统目录下的opt文件下如下:

 经过解压之后,得到toolchain-4.5.1-farsight文件,在当前目录下执行sudo vi ~/.bashrc语句,对文件进行添加配置信息export PATH=/opt/toolchain-4.5.1-farsight/bin:$PATH ,添加完成后,保存退出即可。

8.从上我们也可知道,我也把需要挂载的文件也放在了/opt目录下,此时我们也对该文件进行解压 sudo tar -xvf rootfs_fs210.tgz ,解压得到rootfs文件。加压之后我们就对NFS进行配置。


配置NFS文件系统
/opt$ sudo vi /etc/exports //打开NFS配置文件
/opt/rootfs *(subtree_check,rw,no_root_squash,async)  //将该信息添加到其中即可。
sudo exportfs -a //最后将其挂载

关键字:Linux  移植  驱动  交叉编译环境 引用地址:Linux的移植与Linux驱动交叉编译环境搭建

上一篇:【Linux-设备树】.dtb文件的反汇编
下一篇:DDR 2/3/4 和LPDDR

推荐阅读最新更新时间:2026-03-25 11:47

U-boot 在 mini2440-S3C2440 上的移植(1)-开发环境搭建-交叉编译工具链的安装
编译U-boot给mini2440时,要编译出能在ARM平台上使用的可执行文件-bin,首先要在ubuntu 中安装交叉编译工具链,因为我使用的是友善之臂的开发板,所以我使用的已经制作好的工具链,当然也可以自己制作工具链:如基于GCC和glibc制作工具链,可以使用cross tools编译; 我使用的工具链的版本是arm-linux-gcc-4.3.3版本,下载地址:下载地址 1.在pc端下载好以后,将压缩包用xftp传输到Ubuntu;当然也可以用其他软件上传;上传后把它放在根目录下的/usr/local文件夹中新建一个arm文件夹,然后把压缩包复制到这个文件夹;注意先建好文件夹再上传,可以减少很多工作量; 一定要上传压缩包,
[单片机]
U-boot 在 mini2440-S3C2440 上的<font color='red'>移植</font>(1)-开发<font color='red'>环境</font>搭建-<font color='red'>交叉</font><font color='red'>编译</font>工具链的安装
Linux 系统下ARM Linux交叉编译环境crosstool工具
Linux 系统下ARM Linux交叉编译环境的建立目前流行的有三种途径。 一、使用别人编译好的开发工具链 cross-2.95.3.tar.bz2 arm-linux-gcc-3.3.2.tar.bz2 arm-elf-tools-20030314.sh。 其中arm-elf-tools 是专门用来编译uclinux内核的。我们常用的cross-cross-2.95.3,下载cross-2.95.3.tar.bz2 解压后放到/usr/local/arm 目录下设置下PATH即可使用,这是最方便快捷的方式,缺点是cross-2.95.3 GCC版本是2.95.3,版本较低,不能编译2.6版本的Linux内核和版本较高的u
[单片机]
在CentOS下用cross-ng建立arm-linux交叉编译环境
网上很多都是在Ubuntu下用cross-ng建立arm-linux交叉编译工具的文章,而CentOS下却很难寻觅。在这里记录了自己的建造过程,以供广大网友参阅。 一、配置环境 1、操作系统: CentOS5.5 2、源代码包: crosstool-ng-1.9.0.tar.bz2 二、安装crosstool-ng依赖软件包 libncurses5-dev bison flex texinfo libtool patch lzma cvs gawk glibc-static gcc-java gcc-c++ #在CentOS Shell下,使用命令 $yum install xxx 依次安装。 c
[单片机]
ARM—配置交叉编译环境
方法一:(Android源码编译)   1. 进入Android源码目录—android frameworks native cmds   2. 创建一个目录,参考其他目录写:Android.mk panda.cpp   3. mm   4. 到该目录复制到ARM板—Install: out/target/product/vstar/system/bin/i2c   5. 板子运行 方法二·:(ubunt配置交叉编译环境)   1. Android源码交叉编译工具位置:android prebuilts gcc linux-x86 arm   2. 将交叉编译工具拷贝至ubunt   3. 打开配置文件
[单片机]
TQ210开发板安装QT交叉编译环境安装总结
  系统环境:Ubuntu 12.04 64bit   开发平台:TQ 210开发板   一、总体流程:   二、Ubuntu12.04下安装tslib 1.4 出现各种问题汇总:   出现./autogen.sh: 4: ./autogen.sh: autoreconf: not found的错误解决   我看教程说的是直接执行命令 ./autogen.sh就可以了,后来我执行出错: ./autogen.sh: 4: ./autogen.sh: autoreconf: not found   上网查了查说是我的版本没有安装automake工具。解决方法如下   sudo apt-get install autoconfautom
[单片机]
基于STM32从零写操作系统系列---熟悉纯windows交叉编译环境
目的: 熟悉在纯windows下的交叉编译环境,了解如何下载BIN格式的程序文件到单片机。 实验2: 一个简单的交叉编译与程序下载过程 环境搭建(以我的平台为例): 安装win7 32位,具体教程可百度 安装make和gcc-arm-none-eabi交叉编译工具,具体教程可百度 安装ST-Link Utility软件 在windows系统上安装编辑器,如notepad++ make,gcc-arm-none-eabi,ST-Link Utility软件已在百度云分享: 链接:https://pan.baidu.com/s/1DlzYMo8oZsnF9ammJuuZoQ 提取码:dc5h 具体实验过程: 1.在w
[单片机]
基于STM32从零写操作系统系列---熟悉纯windows<font color='red'>交叉</font><font color='red'>编译</font><font color='red'>环境</font>
arm交叉编译环境配置
1 解压下载的交叉工具链 2 vi /etc/profile 在这个文件最后添加上自己的环境变量: export PATH=$PATH:/usr/local/arm/4.3.2/bin($PATH后面为解压的交叉工具链的绝对地址) 3 source /etc/profile 注:一些交叉工具链要求解压在 /usr/local下 参考: http://www.itkee.com/os/detail-867.html 将下载的交叉编译工具包拷贝到 ubuntu 下的/usr/local/arm目录下(也可以拷贝到其它的地方,这个目录是个人的习惯),并解压(tar -jxvf 工具包名 或 tar -zxvf 工具包名)
[单片机]
S5PV210之beep驱动linux2.6.35.7移植linux3.0.8
beep驱动从linux2.6.35.7内核移植到linux3.0.8,修改的部分为:   '='后面的为修改后的   .ioctl  =  .unlocked_ioctl   static int beep_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)   = static int beep_ioctl(struct file *file, unsigned int cmd, unsigned long arg)   beep_ioctl函数中struct inode *inode去掉,原因是b
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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