原创:linux-2.6.30.24 移植…

本文介绍了在Linux 2.6.30.24版本中进行移植遇到的问题,包括权限错误、网卡驱动、TTY设备和 Busybox 根文件系统配置。通过修改设备权限、网卡资源分配、初始化脚本等内容,逐步解决启动过程中的各种错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Freeing init memory: 132K
/etc/rc.d/init.d/httpd: line 15: /sbin/boa: Permission denied
ifconfig: SIOCGIFFLAGS: No such device
ifconfig: SIOCSIFHWADDR: No such device
ifconfig: SIOCSIFADDR: No such device
route: SIOCADDRT: Network is unreachable

网卡没有移植好,sbin/boa 权限设置错误
网卡移植参考tq出厂的linux2.6.30.4,在mach-s3c2440.c中添加dm9000 结构
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,
}
};
及在static struct platform_device *smdk2440_devices[] __initdata 结构中添加dm9000设备 


2.can't open /dev/ttySAC0: No such file or director
文件系统中dev下没有ttyS0;
1. 修改drivers/tty/serial/samsung.c中 .dev_name="tq2440_serial"
2. 文件系统中/lib一定要完整
3. 文件系统中,/etc/inittab 中 tq2440_serial0::askfirst:-/bin/sh
4. 文件系统中, /etc/init.d/rcS一定要完整,至少要有以下内容
mount -a 
mdev -s


按照上面问题仍然在!!!

参照
问题在于tq2440_serial0关键字找不到。

解决方法:在文件系统中,/etc/inittab 中 tq2440_serial0::askfirst:-/bin/sh改为console::askfirst:-/bin/sh 就行了。
按照上面问题仍然在!!!
can't open /dev/console: No such file or directory

参照:主机:ubuntu 8.10 x86_64
编译了busybox之后,就开始考虑制作一个最小的根文件系统了。
还是从NFS启动。
把编译busybox生成的二进制文件放在NFS目录,有bin sbin usr 和linuxrc
创建etc 目录,在etc目录新建inittab文件
# /etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
新建fstab文件
#/etc/fstab
# device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0 
在etc目录下新建子目录init.d及init.d目录下rcS文件
mkdir init.d
cd ninit.d
vim rcS内容为
#!/bin/sh
ifconfig eth0 192.168.0.100
mount -a
保存,退出。
加上可执行属性
sudo chmod +x 
==========================
在NFS目录下创建其它目录
mkdir dev tmp proc 
=======================
在dev目录下创建必须设备文件
sudo mknod console c 5 1
sudo mknod ttyS0 c 204 64
sudo mknod null c 1 3 
=====================
启动开发板,
看到
Please press Enter to activate this console. 
回车,即可进入shell控制台,
最小系统启动成功。





./compal/CodeSourcery/Sourcery_G++_Lite/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:56:17: error: field 'in' has incomplete type

     .../CodeSourcery/Sourcery_G++_Lite/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:57:18: error: field 'in6' has incomplete type

     ipsvd/tcpudp.c: In function 'tcpudpsvd_main':

     ipsvd/tcpudp.c:314:10: warning: ignoring return value of 'write', declared with attribute warn_unused_result

     make[1]: *** [ipsvd/tcpudp.o] 错误 1

     make: *** [ipsvd] 错误 2

     看到说在我们下载的交叉编译库中有个头文件中的 in 及 in6 类型不对,解决的办法就是:

     在 .../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h 的开头
添加缺少的头文件:
     #include





例子:
cp -i file1 file2              (将文档 file1 复制成 file2 . –i为提示确认。)
cp file1 dir1                 将文档 file1 复制到目录 dir1 下,文件名仍为 file1.
cp /tmp/file1 .              将目录 /tmp 下的文档 file1复制到现行目录下,档名仍为 file1.
cp /tmp/file1 file2         将目录 /tmp 下的文档 file1现行目录下,档名为file2
cp -r dir1 dir2               (recursive copy) 复制整个目录.若目录 dir2 不存在,则将目录dir1,及其所有文档和子目录,复制到目录 dir2 下,新目录名称为dir1.若目录dir2不存在,则将dir1,及其所有文档和子目录,复制为目录 dir2.



busybox 
make defconfig
make menuconfig
make
make install
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值