x6818开发板

内核编译

一、ARM开发板

X6818 使用的芯片是 : 三星 S5P6818的芯片(8 核A53 ARM 架 构)

ARM : 英国剑桥一个公司的名字,只授权 ARM 架构的技术 给一些 厂家:

        授权给三星: S5P4418, S3C2440, S3C44B0, S5P6818 ....

        华为设计芯片的公司:麒麟 990 ,麒麟1000 (找台积电生产)

台积电:有光刻机 (荷兰的 ASML)

ASML: 美国公司控股。

核心板: ARM芯片+内存+NAND flash (1G/2G)组成

        底板: 底板+核心票

         底板: 硬件接口: USB, LED, KEY, NET , SD, UART ,LCD , GPIO

二、手动配置内核

嵌入式系统: 根据应用的硬件,来定制一个linux系统

把 linux 内核裁剪:定制(裁剪掉不需要的代码模块,只需要保留需 要的模块)

执行命令:tar jxvf x6818_linux_180209.tar.bz2 -C ~

解压得到内核源码包: home/china/x6818_linux_180209/linux/kernel/kernel-3.4.39

   配置这个 内核源码包: 裁剪

        交叉编译这个 源码包 -----> uImage 内核镜像文件

        交叉编译: 在 ubuntu上 编译 ARM 平台运行的程序

        交叉编译工具: ARM平台上运行的程序,内核

编译工具是要用:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

1.解压工具包

sudo tar jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /usr/local/arm 交叉编译工具的路径:/usr/local/arm/arm-2014.05/bin

export PATH=/usr/local/arm/arm-2014.05/bin:$PATH (临时有效)

        vim ~/.bashrc 把 一句添加到 最后一行 (永久有效)

2. 把 myln.sh (在群里) 复制到 /usr/local/arm/arm-2014.05/bin

        sudo cp myln.sh /usr/local/arm/arm-2014.05/bin

        sudo ./myln.sh

3. arm-linux-gcc -v

上面结果说明已经成功安装了  arm-linux-gcc 。

4. sudo apt-get install libncurses5-dev
5. cd ~/x6818_linux_180209/linux/kernel/kernel-3.4.39
6. make menuconfig ,进入内核配置图形界面

如果配置完成之后, 保存得到一个 .config 文件。

7. 在 root用户也添加一个 PATH路径

         sudo su

        vim /root/.bashrc

在后面添加路径:export PATH=/usr/local/arm/arm-2014.05/bin:$PATH

8. .config 厂家已经配置好了一个 默认配置文件 x6818-defconfig

将~/x6818_linux_180209/linux/kernel/kernel-3.4.39/arch/arm/configs/x6818-defconfig文件复制到~/x6818_linux_180209/linux/kernel/kernel-3.4.39/.config,命令:

        cp ~/x6818_linux_180209/linux/kernel/kernel-3.4.39/arch/arm/configs/x6818-defconfig ~/x6818_linux_180209/linux/kernel/kernel-3.4.39/.config

9.执行命令

cd ~/x6818_linux_180209/linux

sudo ./mk -u

得到这个文件:/home/china/x6818_linux_180209/linux/bootloader/u-boot-2014.07/tools/mkimage

拷贝程序到/bin ,即配置环境变量:

cp /home/china/x6818_linux_180209/linux/bootloader/u-boot-2014.07/tools/mkimage /bin

sudo make uImage arch=arm CROSS_COMPILE=arm-linux- 

上面这条命令执行的时间可能有些长,耐心等待。最后出现 uImage already 字眼表示成功执行,生成一个uImage 内核镜像文件。

        sudo ./mk -k 编译内核镜像 boot.img

        sudo ./mk -u 编译 u-boot启动文件: u-bookpak.bin

        sudo ./mk -b 编译 文件系统: qt-rootfs.img

以上3个镜像文件: 组成了 嵌入式系统。

三、添加一个内核菜单,即添加一个内核模块

以下编译一个hello (将~/x6818_linux_180209/linux/kernel/kernel-3.4.39/drivers/char/beep 文件复制成同一目录下的 hello,将hello里的 x8618-beep.c 文件改名为 x8618-hello.c) 模块为例。

 1.方式一:编译进内核

每次添加一个 内核模块,就要去重新编译内核,再烧写开发板 菜单是如何生成的?

         kbuild 编译系统。

hello里的 kconfig 是用来生成菜单的一个脚本文件,改写成如下内容:

hello里的 Makefile 是用来指定编译哪个源文件的脚本文件,改写成如下内容:

上一级目录 kconfig,改写成如下内容:

上一级目录的 Makefile,改写成如下内容:

再在之前的目录下,再次执行命令:

make uImage arch=arm CROSS_COMPILE=arm-linux-

CC kernel/configs.o

LD kernel/built-in.o

CC drivers/char/hello/x6818-hello.o     ====>hello编译进内核

LD drivers/char/hello/built-in.o

LD drivers/char/built-in.o

LD drivers/built-in.o

LD vmlinux.o

2. 方式二:编译成 module 

可以把内核模块,选择编译成 module 方式。将hello里的Kconfig文件改写成如下:

 注意:其他要修改的文件按方式一里的改。

编译命令如下:

得到一个 x6818-hello.ko 内核模块文件。

在内核开发图形菜单界面中存在hello选项:

下载到开发板:

        insmod x6818-hello.ko 动态加载模块

        rmmod x6818-hello 动态卸载模块

3. 方式三:自己写一个 Makefile

再把 Makfefile 和一个 x6818-hello.c 放到一个目录,Makefile 内容如下(路径改为自己的路径)。

在对应的目录下make 就会产生 : x6818-hello.ko 。

烧写到开发板的 NAND FLASH (硬盘)

连接 USB-SERI 线到 电脑:

使用 secureCRT 工具: 执行 SecureCRT.exe 。

连接成功后,按换行键,如下操作,登录:

Welcome to X6818

X6818 login:

Welcome to X6818

X6818 login: root

Password: 123456

[root@X6818:~]#        ===> 6818开发板的命令行

下载 x6818-hello.ko 内核模块到开发板(命令:rz)。

insmod hello.ko 加载模块到内核

lsmod 查看 内核有什么模块

rmmod hello 卸载hello模块

此时加载模块hello.ko会失败,由于hello模块是复制的代码,模块加载的机制会出现重复加载。所以改写 hello.c 代码即可。可以改写hello.c 代码如下:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
int hello_init(void)
{
    printk(KERN_INFO "hello init module\n");
    return 0;
}

void hello_exit()
{
    printk(KERN_INFO "hello exit module\n");
    return ;
}

module_init(hello_init); //insmod hello.ko
module_exit(hello_exit); //rmmod hello
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("hello module");
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值