Archive consumer

De neufbox 4

L'archive consumer précédente bcm963xx_3.10L.02_consumer.tar.gz, a été remplacée par une nouvelle archive : bcm963xx_3.12L.01_consumer.tar.gz.

Contenu de l'archive

$ cd /opt
$ wget http://www.efixo.com/neufbox4/freesoftware/broadcom/bcm963xx_3.10L.01_consumer.tar.gz

$ mkdir NB4
$ cd NB4
$ tar xf ../bcm963xx_3.10L.01_consumer.tar.gz

$ ls
bcmdrivers  hostTools  kernel  Makefile  README  shared  targets  userapps  version.make

Différence entre les versions

Les fichiers suivants

http://joel_ejc.club.fr/diff_version_10L_et_06L.txt  format cvs
http://joel_ejc.club.fr/diff_version_10L_et_06L.xls  format excel

contiennent une liste des fichiers différents ou uniquement dans une version

Dans la partie drivers les différences sont essentiellement liées à une différence de configuration (06L sans VOIP, 10L avec VOIP(SIP)

Il est à noter que le Makefile de la partie bcmssl est fourni cette fois-ci ..mais il ne fait qu'installer les librairies libbcnssl.so et libbcmcrypto.so précompilées Les autres différences seraient liées à :

l'introduction d'une option CONFIG_KLOB dans le kernel
la descente dans un niveau plus bas de la gestion des pids des applications en cours
l'ajout de la fonction killall dans busybox

et d'autres à découvrir ...

Compilation

$ make

You need to specify build profile name from /opt/NB4/targets using make PROFILE=<profile name>...

make: *** [sanity_check] Error 1

Il faut spécifier un profil :

$ make PROFILE=96358GWV

Et ça s'arrête sur une erreur :

/opt/NB4/bcmdrivers/broadcom/net/wl/bcm96358/Makefile:16: /opt/NB4/bcmdrivers/broadcom/net/wl/bcm96358/wl/config/wlconfig_lx_wl_dslcpe: No such file or directory
/opt/NB4/bcmdrivers/broadcom/net/wl/bcm96358/Makefile:18: /opt/NB4/bcmdrivers/broadcom/net/wl/bcm96358/wl/config/wl.mk: No such file or directory
make[3]: *** No rule to make target `/opt/NB4/bcmdrivers/broadcom/net/wl/bcm96358/wl/config/wl.mk'.  Stop.
make[2]: *** [/opt/NB4/bcmdrivers/broadcom/net/wl/bcm96358] Error 2
make[1]: *** [/opt/NB4/bcmdrivers] Error 2
make[1]: Leaving directory `/opt/NB4/kernel/linux'
make: *** [kernelbuild] Error 2

Comme SGDA l'a fait remarquer dans le forum, USR 9113 présente une configuration relativement proche de la NB4 (BCM6358, USB, ADSL, Ethernet). Le code source est dispo ici : USR9113_release1.0.tar.gz.

En recopiant le contenu de bcmdrivers/broadcom/net/wl/impl2/Makefile de l'USR 9113 dans celui de la NB4, ça compile :

obj-$(CONFIG_BCM_WLAN) += wl.o

wl-objs += wl_dep.o

ifeq "$(BRCM_CHIP)" "6348"
$(obj)/wl_dep.o: $(obj)/shared/bcm4306_map.o $(obj)/shared/bcm4318_map.o
else
$(obj)/wl_dep.o:
endif
	cp $(obj)/wl$(PROFILE).o_save $(obj)/wl_dep.o

ifeq "$(BRCM_CHIP)" "6348"
include $(BRCMDRIVERS_DIR)/broadcom/./net/wl/impl2/Makefile.srom
endif

Autre solution : éditer le fichier ./bcmdrivers/broadcom/net/wl/bcm96358/Makefile

et commenter les 9 lignes après celle-ci :

 #mark WLAN configuration

comme suit

#mark WLAN configuration
#WLLX=1
#WLCFGDIR       = $(WLSRCBASE)/wl/config
#WLCONFFILE     = wlconfig_lx_wl_dslcpe
#ifeq ($(strip $(BRCM_CHIP)),6338)
#WLCONFFILE     = wlconfig_lx_wl_dslcpe_sdio
#EXTRA_CFLAGS   += -DDSLCPE_SDIO_PIO
#endif

#include $(WLCFGDIR)/$(WLCONFFILE)

#include $(WLCFGDIR)/wl.mk

On relance donc la compilation, et cette fois l'erreur arrive plus loin :

make[1]: Leaving directory `/opt/NB4/kernel/linux'
******************** Kernel Build Lite ********************
/bin/sh: line 1: /opt/NB4/bcmdrivers/broadcom/char/dspapp/impl1/getDspModSizes.sh: No such file or directory
make: *** [kernelbuildlite] Error 127

Pour dépasser celle-ci il faut by-passer la rubrique kernelbuildlite présente dans le Makefile

ifeq ($(strip $(BRCM_CHIP)),6358)
ifeq ($(strip $(BRCM_DRIVER_BCMDSP)),m)
kernelbuildlite:
        @echo "******************** Kernel Build Lite ********************"; \
        $(BRCMDRIVERS_DIR)/broadcom/char/dspapp/impl1/getDspModSizes.sh  $(BRCMDRIVERS_DIR)/broadcom/char/dspapp/impl1/dspdd.ko $(KERNEL_DIR) $(CROSS_COMPILE) $(KERNEL_DEBUG);
        cd $(KERNEL_DIR); $(MAKE)
else
kernelbuildlite:
endif
else
kernelbuildlite:
endif

pour cela éditer le fichier ./targets/96358GWV/96358GWV

et transformer la ligne

 BRCM_DRIVER_BCMDSP=m

en

 # BRCM_DRIVER_BCMDSP is not set


Nouvelle erreur :

/opt/toolchains/uclibc-crosstools/bin/mips-linux-uclibc-gcc -Wall -s -Os -fomit-frame-pointer -I. -I/opt/NB4/userapps/broadcom/cfm/inc -I/opt/NB4/bcmdrivers/opensource/include/bcm963xx -I/opt/NB4/bcmdrivers/broadcom/include/bcm963xx -I/opt/NB4/shared/opensource/include/bcm963xx -I/opt/NB4/shared/broadcom/include/bcm963xx -I/opt/NB4/userapps/broadcom/cfm/inc -I/opt/NB4/userapps/broadcom/cfm/util/psi -I -I -c /opt/NB42/NB4/userapps/broadcom/cfm/util/system/syskill.c
/opt/NB4/userapps/broadcom/cfm/util/system/syskill.c:40:21: ifcdefs.h: No such file or directory
/opt/NB4/userapps/broadcom/cfm/util/system/syskill.c: In function `bcmUploadPrepare':
/opt/NB4/userapps/broadcom/cfm/util/system/syskill.c:77: error: `IFC_SMALL_LEN' undeclared (first use in this function)
/opt/NB4/userapps/broadcom/cfm/util/system/syskill.c:77: error: (Each undeclared identifier is reported only once
/opt/NB4/userapps/broadcom/cfm/util/system/syskill.c:77: error: for each function it appears in.)
/opt/NB4/userapps/broadcom/cfm/util/system/syskill.c:77: warning: unused variable `ifName'
gmake[1]: *** [syskill.o] Erreur 1
gmake[1]: quittant le répertoire « /opt/NB4/userapps/opensource/ftpd »
gmake: *** [bftpd] Erreur 2

Cette erreur intervient lors de la compilation de l'application. Apparemment l'erreur provient de la non définition de la constante IFC_SMALL_LEN qui devrait être définie dans le fichier ifcdefs.h

Cet include est aussi présent dans le fichier opensource ftpd qui a fait appel à des fonctions Broadcom. En particulier (extrait du Makefile) celles des fichiers board_api.c, syscall.c et syskill.c (BROADCOM_CFM_DIR = ./userapps/broadcaom/cfm)

BOARD_API_SRC=$(BROADCOM_CFM_DIR)/util/psi/board_api.c
BOARD_API_OBJ=board_api.o
SYSCALL_SRC=$(BROADCOM_CFM_DIR)/util/system/syscall.c
SYSCALL_OBJ=syscall.o
SYSKILL_SRC=$(BROADCOM_CFM_DIR)/util/system/syskill.c
SYSKILL_OBJ=syskill.o


Dans le fichier syscall.c, ce fichier include (ifcdefs.h) apparaît mais de façon conditionnelle avec la constante USE_ALL

#include "bcmtypes.h"
#ifdef USE_ALL
#include "bcmadsl.h"
#include "ifcdefs.h"    <---- ici
#include "psiapi.h"
#include "sysdiag.h"
#include "clidefs.h"
#include "cliapi.h"
#include "adslctlapi.h"
#if defined(SUPPORT_VDSL)
#include "vdslctlapi.h"
#endif
#include "secapi.h"
#include "dbapi.h"
#include "dbobject.h"
#include "dbvalid.h"
#include "version.h"
#ifdef PORT_MIRRORING
#include <atm.h>
#include "portMirror.h"
#include "atmapidrv.h"
#endif /* PORT_MIRRORING */
#include "bcmcfm.h"
#endif /* USE ALL */

On notera aussi que cette constante (USE_ALL) permet de définir des fonctions supplémentaires

Dans le fichier ./userapps/broadcom/cfm/util/system/syskill.c cette constante (USE_ALL) n'est présente.

La comparaison des fichiers des deux versions de la directory ftpd montre un changement dans la fonction

killAllApps() appelée dans le fichier command.c et incluse dans le fichier fwsyscall.c

la recherche des applications à tuer et leur pid a été reportée dans le fichier cfm/util/system/syskill.c

Donc deux solutions :

soit revenir à l'ancienne version en recopiant l'ancienne distribution

./usersapps/opensource/ftpd.tar.bz2

dans la directory

./usersapps/opensource/

Penser à sauvegarder l'original et à vider (renommer) la directory ftpd actuelle.

Autre solution...mais sans garantie, créer simplement le fichier ifcdefs.h avec la constante

 #define IFC_SMALL_LEN       32    (nombre au hasard)

D'après le fichier syscall.c les constantes

IFC_TINY_LEN et IFC_GIANT_LEN

devraient aussi être définies, sachant que la constante IFC_LARGE_LEN est définie dans syscall.c

#ifndef USE_ALL
#define IFC_LARGE_LEN        264
#endif

Et enfin la compilation aboutit...mais l'image obtenue n'est sans doute pas fonctionnelle pour une connexion vers Neuf avec toutes les fonctionnalités

En particulier au dernier link de vmlinux, il apparait le message

  Building modules, stage 2.
  MODPOST
*** Warning: "TP0halResetEntry" [/opt/NB42/NB4b/bcmdrivers/broadcom/char/endpoint/bcm96358/endpointdd.ko] undefined!

Les caractéristiques de l'image créée sont :

Image components offsets

       cfe offset              : 0xbfc00000    -- Length: 64508
       file tag offset         : 0xbfc10000    -- Length: 256
       rootfs offset           : 0xbfc10100    -- Length: 3203072
       kernel offset           : 0xbff1e100    -- Length: 626932

soit un kernel compressé beaucoup plus petit que celui inclus dans l'image NB4-R1.3.11-MAIN (944026 octets)

Pour obtenir un kernel plus proche de celui de l'image il faut : (les explications ci-dessous supposent que la compilation ci-dessus a déjà été effectué, en particulier avoir recopié le Makefile de la distribution de l'USR9113 dans la directory du driver wifi)

1°) Charger les fichiers mtd.patch et nb4-kernel-defconfig.config depuis le site http://www.efixo.com/neufbox4/freesoftware/

2°) Appliquer le patch exfixo mtd.patch

 patch -p0 < mtd.patch 

3°) Editer le fichier nb4-kernel-defconfig.config

remplacer la ligne 532
532 : CONFIG_ATM_BR2684=y
par
532 : CONFIG_ATM_BR2684=m

4°) créer le lien symbolique

cd bcmdrivers/broadcom/net/wl
ln -s impl2 impl3
cd ../../../../

5°) Editer le fichier kernel/linux/include/linux/skbuff.h

(Attention, la modification n'est valable que pour cette compilation...en attendant un patch validé qui règle le conflit entre les instructions ifdef CONFIG_NET_SCHED et if defined(CONFIG_MIPS_BRCM) Donc penser à sauvegarder la version originale !!!)

Commenter la ligne 325 
#ifdef CONFIG_NET_SCHED
325:        __u32                  tc_index;        /* traffic control index */
qui est en conflit avec la ligne 311
310:  /* NET QOS */
311:        __u32                   tc_index;        /* traffic control index */
312:        __u32                   tc_verd;         /* traffic control verdict */
313:        __u32                   tc_classid;      /* traffic control classid */

Proposition de correction globale : remplacer les lignes 300 à 331 par

#if defined(CONFIG_MIPS_BRCM)
	/* Flag to indicate where the skb is received from, used for WAN2WAN blocking */
	unsigned short		rcvfrom;

	/* NAT cache fields */
        __u32                   nat_cache_hit;
        void *                  nat_cache_rule;
	void			(*nat_cache_modify)(struct sk_buff *skb);
	void			(*nat_cache_add)(struct ip_conntrack *ct,struct ip_nat_info_manip *manip, struct sk_buff *skb);

	/* NET QOS */
	__u32			tc_index;        /* traffic control index */
	__u32           	tc_verd;         /* traffic control verdict */
	__u32           	tc_classid;      /* traffic control classid */

	/* These elements must be at the end, see alloc_skb() for details.  */
	unsigned int		truesize;
	atomic_t		users;
	unsigned char		*head,
				*data,
				*tail,
				*end;
#else
	/* These elements must be at the end, see alloc_skb() for details.  */
	unsigned int		truesize;
	atomic_t		users;
	unsigned char		*head,
				*data,
				*tail,
				*end;

#ifdef CONFIG_NET_SCHED
       __u32			tc_index;        /* traffic control index */
#ifdef CONFIG_NET_CLS_ACT
	__u32           tc_verd;               /* traffic control verdict */
	__u32           tc_classid;            /* traffic control classid */
 #endif

#endif
#endif


6°) copier le fichier nb4-kernel-defconfig.config dans kernel/linux/.config

cp nb4-kernel-defconfig.config kernel/linux/;config

7°) lancer la compilation

make PROFILE=96358GWV

et lors de la reconfiguration du kernel

taper return pour les options avec une réponse par défaut
taper 1 pour les options sans réponse ( _IMPL) []  )

On obtient alors un kernel compressé dont la taille est de 952089 octets

Le message

      • Warning: "TP0halResetEntry" [/opt/NB42/NB4b/bcmdrivers/broadcom/char/endpoint/bcm96358/endpointdd.ko] undefined!

est toujours présent

Le kernel et le file system présente des différences avec ceux de l'image, par exemple :

le kernel compilé a br2684 en tant que module

le driver adsl est inclus dans le file system et non pas monté depuis une partition flash


Pour compiler ensuite le kernel associé à la config PROD.config incluse dans le kernelpatch d'Efixo, voici un bricolage...juste pour le plaisir d'aller au bout

1°) editer le ficher PROD.config

Passer ligne 533 CONFIG_ATM_BR2684=y  à CONFIG_ATM_BR2684=m

Changer la ligne 250 de 
CONFIG_MTD_BCM963XX=y
à 
# CONFIG_MTD_BCM963XX is not set

Insérer en ligne 251
CONFIG_MTD_NEUFBOX=y

Passer la ligne 75  CONFIG_BCM_WLAN_IMPL=1 à CONFIG_BCM_WLAN_IMPL=2

2°) créer dans la directory bcmdrivers/broadcom/net/wl/bcm96358/shared

un Makefile neutre (avec seulement la ligne all:)

un built-in.o neutre en recopiant celui présent dans la directory bcmdrivers/broadcom/net/wl/bcm96358/

3°) Lancer la compilation avec toujours

gmake PROFILE=96358GWV


Le même message concernant endpoint va subsister et le kernel obtenu a une taille de 860145 octets