Привет всем.
Для начала немного истории:Мне захотелось портировать linux под свой телефон Glofiish x500+
В просторах интернета были найдены несколько проектов, которые занимались портированием линукса, и патчили ядро для работы с процессором s3c2442 под armv4t.
http://gnufiish.org/trac/wiki/X500
Этот проект добился больших успехов, ядро с патчем запускается и загружает систему. По USB можно создать сеть и подключиться для работы в шеле. Но проект уже заморожен и версия ядра в репозитории - 2.6.29.
Я долго игрался и этим ядром, но потом мне захотелось ядро поновее с новыми драйверами.
Я нашел проект: mini2440, который также патчил ядро для процессора s3c2442, но в его репозитории git://repo.or.cz/linux-2.6/mini2440.git
было более новое ядро 2.6.32-rc8.
Я взялся его патчить, перенес все патчи на новое ядро, исправил некоторые появившиеся баги, и в итоге также смог запустить это ядро на своем телефоне. Ядро прогружается на телефоне и выполняет /init.
А теперь проблема.
С ядром 2.6.29 я мог загрузиться, поднять сеть и подключиться к телефону.
Детально про ядро:
Linux version 2.6.29-X500_master-mokodev (root@localhost) (gcc version 4.4.3 (GCC) ) #40 PREEMPT Sun Oct 9 09:09:10 MSK 2011
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
С ядром 2.6.32 я не могу подключиться к телефону.
Ядро:
Linux version 2.6.32-rc8-mokodev (root@localhost) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #21 PREEMPT Thu Oct 20 19:49:12 MSD 2011
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
После старта /init скрипт поднимает сетевые интерфейсы (USNNET собран в ядре),
для интерфейса usb0 задается подсеть (192.168.0.202) и маска(255.255.255.0).
Проверяю что все поднялось, ifconfig -a на телефоне:
usb0 Link encap:Ethernet HWaddr C6:63:93:87:4C:FC
inet addr:192.168.0.202 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Внутренние интерфейсы (lo и сам usb0) пингуются нормально, пакеты возвращаются корректные.
Но когда я пытаюсь пинговать телефон, ICMP пакеты не возвращаются.
а tcpdump показывает только:
tcpdump -l -n -i usb0 -vv
tcpdump: listening on usb0, link-type EN10MB (Ethernet), capture size 96 bytes
17:34:19.781787 arp who-has 192.168.0.202 tell 192.168.0.200
17:34:20.783787 arp who-has 192.168.0.202 tell 192.168.0.200
17:34:21.785768 arp who-has 192.168.0.202 tell 192.168.0.200
Ошибок при этом нет никаких ни на телефоне в dmesg, ни на локальном компьютере.
Для локализации проблемы я выполнил следующее:
В скрипт на телефоне, который запускается после загрузки ядра я добавил стоку
ping 192.168.0.200
а на локальном компьютере на интерфейсе usb0 поднимаю сеть (192.168.0.200 netmask 255.255.255.0) и вешаю на него tcpdupm чтобы посмотреть, приходят ли мне ICMP пакеты от телефона.
И в итоге я получил вот что:
tcpdump -i usb0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on usb0, link-type EN10MB (Ethernet), capture size 96 bytes
19:17:35.921404 ff:ff:16:5d:9c:3c (oui Unknown) > 2e:40:ff:ff:ff:ff (oui Unknown), ethertype Unknown (0x774a), length 48:
0x0000: 0806 0001 0800 0604 0001 165d 9c3c 774a ...........].<wJ
0x0010: c0a8 00ca 0000 0000 0000 c0a8 00c8 dead ................
0x0020: beef ..
19:17:36.920445 ff:ff:16:5d:9c:3c (oui Unknown) > 2e:40:ff:ff:ff:ff (oui Unknown), ethertype Unknown (0x774a), length 48:
0x0000: 0806 0001 0800 0604 0001 165d 9c3c 774a ...........].<wJ
0x0010: c0a8 00ca 0000 0000 0000 c0a8 00c8 dead ................
0x0020: beef ..
После перезагрузки телефона и повторения процедуры строки немного меняются:
tcpdump -i usb0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on usb0, link-type EN10MB (Ethernet), capture size 96 bytes
19:51:02.479062 ff:ff:c6:63:93:87 (oui Unknown) > 2e:40:ff:ff:ff:ff (oui Unknown), ethertype Unknown (0x4cfc), length 48:
0x0000: 0806 0001 0800 0604 0001 c663 9387 4cfc ...........c..L.
0x0010: c0a8 00ca 0000 0000 0000 c0a8 00c8 dead ................
0x0020: beef ..
19:51:03.480324 ff:ff:c6:63:93:87 (oui Unknown) > 2e:40:ff:ff:ff:ff (oui Unknown), ethertype Unknown (0x4cfc), length 48:
0x0000: 0806 0001 0800 0604 0001 c663 9387 4cfc ...........c..L.
0x0010: c0a8 00ca 0000 0000 0000 c0a8 00c8 dead ................
0x0020: beef
Вопрос:
Где искать корни проблемы?
Я понимаю, что проблема может быть где угодно, но из-за маленького опыта работы с ядром я не знаю с чего начать поиск.