Make GNU/Linux emulation work again, with initialization support.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2021-02-18 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* src/configure [GNU_LINUX_EMULATION] (def_mhz): Define.
|
||||||
|
(output_vendor_product_serial_strings): Output ARCH.
|
||||||
|
|
||||||
|
* GNUK_USB_DEVICE_ID: Use "Gnuk Token" for emulation, too.
|
||||||
|
|
||||||
|
* src/main.c [GNU_LINUX_EMULATION] (main): Add initialization of
|
||||||
|
the .gnuk-flash-image file.
|
||||||
|
(gnuk_sbrk): Rename from sbrk.
|
||||||
|
|
||||||
2020-09-10 NIIBE Yutaka <gniibe@fsij.org>
|
2020-09-10 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* VERSION: 1.2.16.
|
* VERSION: 1.2.16.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# VID:PID bcdDev Product_STRING Vendor_STRING
|
# VID:PID bcdDev Product_STRING Vendor_STRING
|
||||||
0000:0000 0200 Gnuk Emulation Free Software Initiative of Japan
|
0000:0000 0200 Gnuk Token Free Software Initiative of Japan
|
||||||
234b:0000 0200 Gnuk Token Free Software Initiative of Japan
|
234b:0000 0200 Gnuk Token Free Software Initiative of Japan
|
||||||
20a0:4211 0200 Nitrokey Start Nitrokey
|
20a0:4211 0200 Nitrokey Start Nitrokey
|
||||||
1209:2440 0200 Gnuk Token GnuPG e.V.
|
1209:2440 0200 Gnuk Token GnuPG e.V.
|
||||||
|
|||||||
8
src/configure
vendored
8
src/configure
vendored
@@ -6,7 +6,7 @@ nl=$'\n'
|
|||||||
#
|
#
|
||||||
# This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
|
# This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018
|
# Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2021
|
||||||
# Free Software Initiative of Japan
|
# Free Software Initiative of Japan
|
||||||
#
|
#
|
||||||
# This file is a part of Gnuk, a GnuPG USB Token implementation.
|
# This file is a part of Gnuk, a GnuPG USB Token implementation.
|
||||||
@@ -210,26 +210,27 @@ FST_01SZ)
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
def_mhz="-DMHZ=$MHZ"
|
||||||
if test "$target" = "GNU_LINUX"; then
|
if test "$target" = "GNU_LINUX"; then
|
||||||
ldscript=""
|
ldscript=""
|
||||||
chip="gnu-linux"
|
chip="gnu-linux"
|
||||||
|
arch="gnu-linux"
|
||||||
emulation="yes"
|
emulation="yes"
|
||||||
cross=""
|
cross=""
|
||||||
mcu="none"
|
mcu="none"
|
||||||
def_emulation="-DGNU_LINUX_EMULATION"
|
def_emulation="-DGNU_LINUX_EMULATION"
|
||||||
def_memory_size="-DMEMORY_SIZE=1024"
|
def_memory_size="-DMEMORY_SIZE=1024"
|
||||||
def_mhz=""
|
|
||||||
enable_hexoutput=""
|
enable_hexoutput=""
|
||||||
libs="-lpthread"
|
libs="-lpthread"
|
||||||
else
|
else
|
||||||
ldscript="gnuk.ld"
|
ldscript="gnuk.ld"
|
||||||
chip="stm32f103"
|
chip="stm32f103"
|
||||||
|
arch="cortex-m"
|
||||||
emulation=""
|
emulation=""
|
||||||
cross="arm-none-eabi-"
|
cross="arm-none-eabi-"
|
||||||
mcu="cortex-m3"
|
mcu="cortex-m3"
|
||||||
def_emulation=""
|
def_emulation=""
|
||||||
def_memory_size="-DMEMORY_SIZE=$MEMORY_SIZE"
|
def_memory_size="-DMEMORY_SIZE=$MEMORY_SIZE"
|
||||||
def_mhz="-DMHZ=$MHZ"
|
|
||||||
enable_hexoutput=yes
|
enable_hexoutput=yes
|
||||||
libs=""
|
libs=""
|
||||||
fi
|
fi
|
||||||
@@ -470,6 +471,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
(echo "CHIP=$chip";
|
(echo "CHIP=$chip";
|
||||||
|
echo "ARCH=$arch";
|
||||||
echo "EMULATION=$emulation";
|
echo "EMULATION=$emulation";
|
||||||
echo "CROSS=$cross";
|
echo "CROSS=$cross";
|
||||||
echo "MCU=$mcu";
|
echo "MCU=$mcu";
|
||||||
|
|||||||
41
src/main.c
41
src/main.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c - main routine of Gnuk
|
* main.c - main routine of Gnuk
|
||||||
*
|
*
|
||||||
* Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018
|
* Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2021
|
||||||
* Free Software Initiative of Japan
|
* Free Software Initiative of Japan
|
||||||
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
||||||
*
|
*
|
||||||
@@ -36,6 +36,11 @@
|
|||||||
#include "usb-cdc.h"
|
#include "usb-cdc.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
#ifdef GNU_LINUX_EMULATION
|
#ifdef GNU_LINUX_EMULATION
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define main emulated_main
|
#define main emulated_main
|
||||||
@@ -372,6 +377,34 @@ main (int argc, const char *argv[])
|
|||||||
else
|
else
|
||||||
flash_image_path = argv[1];
|
flash_image_path = argv[1];
|
||||||
|
|
||||||
|
if (access (flash_image_path, F_OK) < 0)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
char buf[8192];
|
||||||
|
|
||||||
|
memset (buf, 0xff, sizeof buf);
|
||||||
|
memset (buf+4*1024, 0, 2);
|
||||||
|
fd = open (flash_image_path, O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
|
||||||
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
perror ("creating flash file");
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write (fd, buf, sizeof buf) != sizeof buf)
|
||||||
|
{
|
||||||
|
perror ("initializing flash file");
|
||||||
|
close (fd);
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
close (fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
puts ("Gnuk (emulation with USBIP), a GnuPG USB Token implementation");
|
||||||
|
puts ("Copyright (C) 2021 Free Software Initiative of Japan");
|
||||||
|
puts ("This is free software under GPLv3+.");
|
||||||
|
|
||||||
flash_addr = flash_init (flash_image_path);
|
flash_addr = flash_init (flash_image_path);
|
||||||
flash_addr_key_storage_start = (uint8_t *)flash_addr;
|
flash_addr_key_storage_start = (uint8_t *)flash_addr;
|
||||||
flash_addr_data_storage_start = (uint8_t *)flash_addr + 4096;
|
flash_addr_data_storage_start = (uint8_t *)flash_addr + 4096;
|
||||||
@@ -563,11 +596,11 @@ gnuk_malloc_init (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
sbrk (size_t size)
|
gnuk_sbrk (intptr_t size)
|
||||||
{
|
{
|
||||||
void *p = (void *)heap_p;
|
void *p = (void *)heap_p;
|
||||||
|
|
||||||
if ((size_t)(HEAP_END - heap_p) < size)
|
if ((HEAP_END - heap_p) < size)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
heap_p += size;
|
heap_p += size;
|
||||||
@@ -603,7 +636,7 @@ gnuk_malloc (size_t size)
|
|||||||
{
|
{
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
{
|
{
|
||||||
m = (struct mem_head *)sbrk (size);
|
m = (struct mem_head *)gnuk_sbrk (size);
|
||||||
if (m)
|
if (m)
|
||||||
m->size = size;
|
m->size = size;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user